基于字典的 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.