Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 继续获取未定义的全局名称错误_Python_Variables_Global - Fatal编程技术网

Python 继续获取未定义的全局名称错误

Python 继续获取未定义的全局名称错误,python,variables,global,Python,Variables,Global,这是我为一个班级做的一个项目的一部分 def defineType(riskCode): if riskCode == 1: riskType = High else: if riskCode == 2: riskType = Moderate else: if riskCode == 3: riskType = Low else

这是我为一个班级做的一个项目的一部分

def defineType(riskCode):
    if riskCode == 1:
        riskType = High
    else:
        if riskCode == 2:
            riskType = Moderate
        else:
            if riskCode == 3:
                riskType = Low
            else:
                if RiskCode == 4:
                    riskType = No
这些是我的全局变量

# Global Variables
custName = input('Please enter your name: ')
custAge = int(input('Please enter your age: '))
custViolation = int(input('Please enter the number of violations: '))

riskCode = 0
estimatePrice = 0
riskType = none
回溯(最近一次呼叫最后一次):
文件“C:\Users\Alli\Downloads\hwhorbbery.py”,第13行,在
风险类型=无
名称错误:未定义名称“无”
这是我不断得到的错误,根据我试图解决问题所做的更改而有所不同

任何帮助都将不胜感激

谢谢!
Alli

它是
None
不是
None
。Python区分大小写。

它是
None
而不是
None
。Python区分大小写。

我看到的最初问题是,
none
不是Python中的内置值<但代码>无为空

此外,第一个函数中的嵌套if语句塔是不必要的。把它压扁

Traceback (most recent call last):
  File "C:\Users\Alli\Downloads\HwyRobbery.py", line 13, in <module>
    riskType = none
NameError: name 'none' is not defined
这不是一个错误,但它更具可读性,不是吗?(也更容易键入:)

另外,我认为
中等
在代码的其他地方都有定义?如果将它们用作枚举常量(即,作为一组值不变的唯一整数),
高、
中、
低和
无将更为惯用

事实上,如果你这样做了,整个功能就可以被取消了,就像这样:

def defineType(riskCode):
    if riskCode == 1:
        riskType = High
    elif riskCode == 2:
        riskType = Moderate
    elif riskCode == 3:
        riskType = Low
    elif RiskCode == 4:
        riskType = No
现在你根本不需要绘制它们的地图;您只需将
riskCode
分配给
riskType
,尽管现在这可能有点多余

HIGH = 1
MODERATE = 2
LOW = 3
NO = 4
如果要从风险代码中获取字符串,请尝试第二个字典

最后。。。我建议将这些代码放在它们自己的名称空间中:

riskType = riskCode
然后,您可以这样引用它们:

class Risk(object):
    HIGH = 1
    MODERATE = 2
    LOW = 3
    NO = 4

现在,您可以自由地使用诸如
NO
之类的短词来表示其他内容。

我看到的最初问题是
none
在Python中不是内置值<但代码>无
为空

此外,第一个函数中的嵌套if语句塔是不必要的。把它压扁

Traceback (most recent call last):
  File "C:\Users\Alli\Downloads\HwyRobbery.py", line 13, in <module>
    riskType = none
NameError: name 'none' is not defined
这不是一个错误,但它更具可读性,不是吗?(也更容易键入:)

另外,我认为
中等
在代码的其他地方都有定义?如果将它们用作枚举常量(即,作为一组值不变的唯一整数),
高、
中、
低和
无将更为惯用

事实上,如果你这样做了,整个功能就可以被取消了,就像这样:

def defineType(riskCode):
    if riskCode == 1:
        riskType = High
    elif riskCode == 2:
        riskType = Moderate
    elif riskCode == 3:
        riskType = Low
    elif RiskCode == 4:
        riskType = No
现在你根本不需要绘制它们的地图;您只需将
riskCode
分配给
riskType
,尽管现在这可能有点多余

HIGH = 1
MODERATE = 2
LOW = 3
NO = 4
如果要从风险代码中获取字符串,请尝试第二个字典

最后。。。我建议将这些代码放在它们自己的名称空间中:

riskType = riskCode
然后,您可以这样引用它们:

class Risk(object):
    HIGH = 1
    MODERATE = 2
    LOW = 3
    NO = 4

现在,您可以自由地使用诸如
NO
之类的短词来表示其他内容。

无需使用函数来表示风险映射,您只需使用以下内容:

if riskCode == Risk.HIGH: do_something()
但在高的情况下,…No不是实例或变量,而是字符串,而不是:

riskmapping = {1:High, 2:Moderate, 3:Low, 4:No}
用法:

riskmapping = {1:'High', 2:'Moderate', 3:'Low', 4:'No'}


无需使用函数要使用函数进行风险映射,您只需使用以下内容:

if riskCode == Risk.HIGH: do_something()
但在高的情况下,…No不是实例或变量,而是字符串,而不是:

riskmapping = {1:High, 2:Moderate, 3:Low, 4:No}
用法:

riskmapping = {1:'High', 2:'Moderate', 3:'Low', 4:'No'}


除此之外,我对简洁性的贡献是:

if riskmapping[currentRiskCode]:
    #do smth

除此之外,我对简洁性的贡献是:

if riskmapping[currentRiskCode]:
    #do smth

如果您正在修改函数中的全局变量,而不是声明它,请不要这样做 您必须使用全局关键字

riskCodes = {1: 'High', 2: 'Moderate', 3: 'Low', 4: 'No'}

def defineType(riskCode):
    riskType = riskCodes[riskCode]

如果您正在修改函数中的全局变量,而不是声明它,请不要这样做 您必须使用全局关键字

riskCodes = {1: 'High', 2: 'Moderate', 3: 'Low', 4: 'No'}

def defineType(riskCode):
    riskType = riskCodes[riskCode]

在函数中设置
riskType
是该函数的本地设置,不会影响全局设置中的值。您需要将
global riskType
放在试图修改它的代码之前,告诉您的函数使用全局风险类型

None
应大写

我相信您的意思是将riskType设置为字符串,因此应该引用这些值

Python的
else if
有一个
elif

更正后的代码:


def defineType(riskCode):
    global riskType

    if riskCode == 1:
        riskType = High




在函数中设置
riskType
是该函数的本地设置,不会影响全局设置中的值。您需要将
global riskType
放在试图修改它的代码之前,告诉您的函数使用全局风险类型

None
应大写

我相信您的意思是将riskType设置为字符串,因此应该引用这些值

Python的
else if
有一个
elif

更正后的代码:


def defineType(riskCode):
    global riskType

    if riskCode == 1:
        riskType = High




NameError:name'High'没有定义我猜Alli OGrady是python新手(如果没有的话,很抱歉!),所以我想你应该展示一下它的用法。实际上我已经根据OP代码添加了我的代码,所以我想他对这个变量有定义,我只给出了他的代码的简短版本。def main():assignRisk()calculateIns()defineType()如果custAge<16或custAge>105:print('Invalid Entry')elif custViolation<0:print('Invalid Entry')else:print(custName',作为',riskType,'risk driver,您的保险将花费美元',estimatePrice,.00')def defineType():全局风险类型如果riskCode==1:riskType=High-elif-riskCode==2:riskType=Medium-elif-riskCode==3:riskType=Low-elif-riskCode==4:riskType=NoNameError:name“High”未定义我猜Alli OGrady是python的新手(如果不是,很抱歉!)所以我想你应该展示一下用法。实际上我已经添加了基于OP代码的代码,所以我想他对这个变量有定义,我只给出了他的代码的简短版本。def main():assignRisk()calculate