问题描述
我在try except语句中使用NameError,如下所示:
from tkinter import *
# Functions
def chordLabelTextGen(CHORDS, current_chord):
while True:
try:
return_value = CHORDS
current_chord_pos = return_value.index(current_chord)
return_value.remove(current_chord_pos)
return return_value
except NameError:
return_value = CHORDS
return return_value
# Main
ROOT = Tk()
ROOT.geometry("600x400")
ROOT.title("Chord Changes Log")
STANDARD_TUNING_CHORDS = ["A","B","C","D","E","F","G"]
chord_names = chordLabelTextGen(STANDARD_TUNING_CHORDS, current_chord)
current_chord = chord_names[0]
chord_names = chordLabelTextGen(STANDARD_TUNING_CHORDS, current_chord)
print (chord_names)
但是当我通过IDLE运行它时会返回以下错误消息:
Traceback (most recent call last):
File "C:/Users/Jack/Desktop/Python Projects/Gutiar chord changes log PROTOTYPE.py", line 26, in <module>
chord_names = chordLabelTextGen(STANDARD_TUNING_CHORDS, current_chord)
NameError: name 'current_chord' is not defined
我认为expect语句会想要一个else语句而是运行第二个块,但它似乎不会这样工作。
任何人都可以向我解释这个吗?
1楼
问题是在主函数中而不是在函数中引发了NameError
异常。
当你调用函数时,你的作用域中不存在current_chord
,所以程序在进入函数之前失败,当它试图将参数放在堆栈上时......
如果你把这样的东西:
try:
chord_names = chordLabelTextGen(STANDARD_TUNING_CHORDS, current_chord)
except NameError:
print("Damn, there's an error")
...你会看到错误信息。
此外,使用try/except
块处理未定义的变量并不是很漂亮。
您应该知道变量何时存在以及何时不存在。
2楼
exception NameError在找不到本地或全局名称时引发。 这仅适用于不合格的名称。 关联的值是包含无法找到的名称的错误消息。