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

时间:2011-06-17 15:08:24

标签: python variables global

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

这些是我的全局变量......

Traceback (most recent call last):
  File "C:\Users\Alli\Downloads\HwyRobbery.py", line 13, in <module>
    riskType = none
NameError: name 'none' is not defined

这是我不断变化的错误,具体取决于我尝试解决问题所做的更改

任何帮助都将非常感谢!!!

谢谢! 阿利

6 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:8)

我看到的初始问题是none不是Python中的内置值。 None是。{/ p>

此外,第一个函数中的嵌套if语句塔是不必要的。展平了!

def defineType(riskCode):
    if riskCode == 1:
        riskType = High
    elif riskCode == 2:
        riskType = Moderate
    elif riskCode == 3:
        riskType = Low
    elif RiskCode == 4:
        riskType = No

这不是错误,但它更具可读性,不是吗? (也更容易输入:)

另外,我认为代码中的其他地方定义了HighModerateLowNo?如果您将它们用作枚举常量(即作为一组其值不变的唯一整数),HIGHMODERATELOWNO将是更加惯用。

事实上,如果你这样做,那么整个功能就可以完成:

HIGH = 1
MODERATE = 2
LOW = 3
NO = 4

现在你根本不需要映射它们;你只需将riskCode分配给riskType,虽然现在可能有点多余了!

riskType = riskCode

如果您想从风险代码中获取字符串,请尝试使用第二个字典from Artsiom Rudzenka's answer

最后......我建议将这些代码放在自己的命名空间中:

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

然后您可以像这样引用它们:

if riskCode == Risk.HIGH: do_something()

现在,您可以自由地使用NO这样的简短词来表达其他内容。

答案 2 :(得分:3)

无需使用函数来使用函数进行风险映射,只需使用以下代码:

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

但是如果是High,... No不是实例或变量,而只是一个字符串而不是:

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

用法:

highRisk = riskmapping[1]

if riskmapping[currentRiskCode]:
    #do smth

答案 3 :(得分:1)

除了没有,我对简单的贡献:

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

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

答案 4 :(得分:1)

如果要在函数之外修改全局变量,而不是声明为“不” 你必须使用全局关键字。


def defineType(riskCode):
    global riskType

    if riskCode == 1:
        riskType = High



答案 5 :(得分:0)

在函数内设置riskType对于该函数是本地的,不会影响全局中的值。您需要通过在尝试修改它的代码之前放置global riskType来告诉您的函数使用全局。

None应该大写。

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

Python elif有一个else if

更正的代码:

# Global Variables
riskCode = 0
estimatePrice = 0
riskType = None

def defineType(riskCode):
    global riskType
    if riskCode == 1:
        riskType = "High"
    elif riskCode == 2:
        riskType = "Moderate"
    elif riskCode == 3:
        riskType = "Low"
    elif RiskCode == 4:
        riskType = "No"