【问题标题】:How to fix NameError: name 'policydict' is not defined [duplicate]如何修复NameError:名称'policydict'未定义[重复]
【发布时间】:2018-12-27 16:24:47
【问题描述】:

我在全局脚本中将 policydict 定义为 policydict = {},当我从主脚本运行更新策略时,我得到了未定义的回溯 policydict。

import mysql.connector
import datetime
import xlrd
import re
import os
import csv

from Global import guardpointdict


def updatepolicies():
    global policydict

#read in csv from vormetric
    with open('policies.csv') as polcsvfile:
        policies = csv.DictReader(polcsvfile)
        for row in policies:
        #print(row['Report Id'], row['Status Id'], row['Host Name'], row["OS Type"], row['Host Description'], row['License Type'],
              #row['One-Way Enabled'], row['FS Agent Registration Status'], row['FS Agent Version'], row['Host Name'], row['Last Policy Update'],
              #row['Guard Point Id'], row['Guard Path'], row['Policy Id'], row['Policy Name'], row['Guard Enabled'],
              #row['Guard Point Status'], row['Error Reason'])



        #create database connection

            conn = mysql.connector.connect(host='xxx', user='xxx', 
            password='xxx', db='mydb')
            cursor = conn.cursor()


        #Create parameters for stored procedure
            policyparams = (row['Policy Name'], row['Policy Description'], 0)

        #call stored procedure
            returnvalue = cursor.callproc('update_policies', policyparams)

        # create dictionary used for keypair in guardpoints table
             policydict[row['Policy Name']] = returnvalue[2]



            conn.commit()
            conn.close()

Traceback(最近一次调用最后一次): 文件“C:/Users/n0256468/PycharmProjects/scorecard/Main.py”,第 16 行,在 更新策略() 文件“C:\Users\n0256468\PycharmProjects\scorecard\policies.py”,第 38 行,在 updatepolicies policydict[row['Policy Name']] = returnvalue[2] NameError: name 'policydict' 未定义

进程以退出代码 1 结束

【问题讨论】:

  • global 不是这样工作的。

标签: python python-3.x


【解决方案1】:

您似乎在另一个文件中定义了policydict,但是您没有在代码中的任何地方使用from module import policydict。如果您只是导入模块,则必须在变量前面加上模块名称。例如,如果policydictmymodule

import mymodule

print(mymodule.policydict)

如果您不想在其前面加上模块名称,您可以这样做:

from mymodule import policydict

print(policydict)

global policydict指的是全局变量policydict在当前文件中

【讨论】:

  • 谢谢大卫三世,这正是我所缺少的。导入语句。从模块名导入策略字典。
猜你喜欢
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 2017-09-24
  • 2017-08-30
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多