基于字典的 switch case 中的 NameError
NameError in dictionary-based switch case
我没有使用 python 的经验,所以我想我会开始研究它来培养我的新爱好。当涉及到 python 没有的开关盒时,我遇到了一个问题,谷歌搜索后我发现大多数使用字典样式的方法,您可以在下面看到。这是我正在构建的一个小 .py 文件,用于复制 ATM 样式系统,只是为了让我熟悉 python 的所有选项。
while True:
print ("Who are you?")
name = input().lower()
if re.match("^[A-Za-z]*$", name):
break
else:
print('Please enter a valid name')
print('Hello ' + name)
print("Please enter your PIN " + name)
pin = input()
accounts = {"stephen" : stephen,
"Dean" : Dean,
"Jennifer" : Jennifer,
"Liam" : Liam,
"Billie" : Billie,
"Decky" : Decky,
"Joel" : Joel,
}
accounts[name]()
def stephen():
if pin == 1234:
print("Pin Accepted")
else:
print("Wrong PIN")
def Dean():
if pin == 1344:
print("Pin Accepted")
else:
print("Wrong PIN")
现在的问题是,当我进入 enter pin 部分时,它返回一个错误,提示如下:
options = {"stephen" : stephen, NameError: name 'stephen' is not defined
有什么想法吗?看着这个例子,我似乎一切都正确,但我无法通过谷歌搜索特定错误找到答案。
在您因为尝试使用 stephen
而出现错误时,它尚未定义。在定义函数后创建字典。
Python是一个interpreted language,意思是代码由解释器逐行执行,没有事先编译。因此,当您尝试将函数 stephen
输入字典时,函数 stephen
并未定义,因为它只是稍后在脚本中定义。在将函数输入字典之前定义函数 stephen
,您的脚本将运行。
accounts = {"stephen" : stephen,
"Dean" : Dean,
"Jennifer" : Jennifer,
"Liam" : Liam,
"Billie" : Billie,
"Decky" : Decky,
"Joel" : Joel,
}
1) 您的 accounts
字典中的值导致错误。无论是变量还是函数,在使用前都必须先定义。
2) 删除 account
词典中的最后一个逗号
这里有一个简单的示例:
>>> mydict ={"a":A} # A is not defined, will raise Error
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'A' is not defined
>>> mydict ={"a":"A"} # A is string here, it is okay
>>> A = "A" # declares A and assigns value to it
>>> mydict ={"a":A} # good now.
我没有使用 python 的经验,所以我想我会开始研究它来培养我的新爱好。当涉及到 python 没有的开关盒时,我遇到了一个问题,谷歌搜索后我发现大多数使用字典样式的方法,您可以在下面看到。这是我正在构建的一个小 .py 文件,用于复制 ATM 样式系统,只是为了让我熟悉 python 的所有选项。
while True:
print ("Who are you?")
name = input().lower()
if re.match("^[A-Za-z]*$", name):
break
else:
print('Please enter a valid name')
print('Hello ' + name)
print("Please enter your PIN " + name)
pin = input()
accounts = {"stephen" : stephen,
"Dean" : Dean,
"Jennifer" : Jennifer,
"Liam" : Liam,
"Billie" : Billie,
"Decky" : Decky,
"Joel" : Joel,
}
accounts[name]()
def stephen():
if pin == 1234:
print("Pin Accepted")
else:
print("Wrong PIN")
def Dean():
if pin == 1344:
print("Pin Accepted")
else:
print("Wrong PIN")
现在的问题是,当我进入 enter pin 部分时,它返回一个错误,提示如下:
options = {"stephen" : stephen, NameError: name 'stephen' is not defined
有什么想法吗?看着这个例子,我似乎一切都正确,但我无法通过谷歌搜索特定错误找到答案。
在您因为尝试使用 stephen
而出现错误时,它尚未定义。在定义函数后创建字典。
Python是一个interpreted language,意思是代码由解释器逐行执行,没有事先编译。因此,当您尝试将函数 stephen
输入字典时,函数 stephen
并未定义,因为它只是稍后在脚本中定义。在将函数输入字典之前定义函数 stephen
,您的脚本将运行。
accounts = {"stephen" : stephen,
"Dean" : Dean,
"Jennifer" : Jennifer,
"Liam" : Liam,
"Billie" : Billie,
"Decky" : Decky,
"Joel" : Joel,
}
1) 您的 accounts
字典中的值导致错误。无论是变量还是函数,在使用前都必须先定义。
2) 删除 account
词典中的最后一个逗号
这里有一个简单的示例:
>>> mydict ={"a":A} # A is not defined, will raise Error
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'A' is not defined
>>> mydict ={"a":"A"} # A is string here, it is okay
>>> A = "A" # declares A and assigns value to it
>>> mydict ={"a":A} # good now.