当前位置: 代码迷 >> python >> 有人可以解释在try except语句中使用NameError吗?
  详细解决方案

有人可以解释在try except语句中使用NameError吗?

热度:97   发布时间:2023-06-21 10:52:15.0

我在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语句而是运行第二个块,但它似乎不会这样工作。
任何人都可以向我解释这个吗?

问题是在主函数中而不是在函数中引发了NameError异常。 当你调用函数时,你的作用域中不存在current_chord ,所以程序在进入函数之前失败,当它试图将参数放在堆栈上时......

如果你把这样的东西:

try:
    chord_names = chordLabelTextGen(STANDARD_TUNING_CHORDS, current_chord)
except NameError:
    print("Damn, there's an error")

...你会看到错误信息。 此外,使用try/except块处理未定义的变量并不是很漂亮。 您应该知道变量何时存在以及何时不存在。

exception NameError在找不到本地或全局名称时引发。 这仅适用于不合格的名称。 关联的值是包含无法找到的名称的错误消息。