不断出现全局名称未定义错误
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
这是我不断遇到的错误,根据我尝试解决问题所做的不同修改,错误信息也会有所不同。
任何帮助都将非常感谢!!!
谢谢!
Alli
6 个回答
3
其实你不需要用函数来做风险映射,你可以直接使用下面的代码:
riskmapping = {1:High, 2:Moderate, 3:Low, 4:No}
不过如果“High”等这些不是实例或变量,而只是字符串的话,你可以这样做:
riskmapping = {1:'High', 2:'Moderate', 3:'Low', 4:'No'}
用法:
highRisk = riskmapping[1]
或者
if riskmapping[currentRiskCode]:
#do smth
8
我看到的第一个问题是,none
不是 Python 中的内置值,而 None
是的。
另外,第一个函数里那一堆嵌套的 if 语句其实没必要,可以简化一下!
def defineType(riskCode):
if riskCode == 1:
riskType = High
elif riskCode == 2:
riskType = Moderate
elif riskCode == 3:
riskType = Low
elif RiskCode == 4:
riskType = No
这样写虽然不是错误,但可读性更高,对吧?(而且打字也更简单 :)
还有,我猜你在代码的其他地方定义了 High
、Moderate
、Low
和 No
吧?如果你把它们当作枚举常量使用(也就是一组不变的独特整数),那么用 HIGH
、MODERATE
、LOW
和 NO
会更符合习惯。
事实上,如果你这样做了,整个函数可以像这样简化掉:
HIGH = 1
MODERATE = 2
LOW = 3
NO = 4
这样你就根本不需要再映射它们了;你可以直接把 riskCode
赋值给 riskType
,虽然现在这样可能有点多余!
riskType = riskCode
如果你想从风险代码中获取字符串,可以试试第二个字典,具体可以参考 Artsiom Rudzenka 的回答。
最后……我建议把这些代码放在自己的命名空间里:
class Risk(object):
HIGH = 1
MODERATE = 2
LOW = 3
NO = 4
这样你就可以像这样引用它们:
if riskCode == Risk.HIGH: do_something()
现在你可以自由地用 NO
这样的简短词汇来表示其他东西了。
16
是None
而不是none
。Python是区分大小写的。