查找导致异常的执行路径
Finding execution path leading to exception
我的 IDE 警告我在赋值前可能 变量引用 。但我很难发现它。我已准备好提交错误报告,但也许您可以看到我没有看到的内容。
有问题的变量是一个命名的 check_dialog
并且 赋值前的引用 警告发生在我为您标记的行中以下代码片段的末尾:
if dialog:
validate = None
string = False
if dialog == Prompt.YES | Prompt.NO:
check_dialog = lambda c: chr(c) in 'yn'
elif dialog == Prompt.CONTINUE | Prompt.QUIT:
check_dialog = lambda c: chr(c) in 'cq'
elif dialog == Prompt.YES | Prompt.NO | Prompt.QUIT:
check_dialog = lambda c: chr(c) in 'ynq'
else:
raise ValueError('Invalid dialog argument.')
answer = None
while not answer:
self.addstr(0, 1, prompt)
if string:
curses.curs_set(True)
curses.echo()
answer = self.getstr(1, 3)
curses.noecho()
curses.curs_set(False)
elif dialog:
while not check_dialog(answer): # warning here!
answer = self.getch()
else:
answer = self.getch()
您的 IDE 并不是 "thinking" 变量的每个可能值(在大多数情况下,这是不可能的),而是使用启发式方法来防止常见错误。在这种情况下,它注意到 check_dialog
是在 if 条件中定义的,但并非在所有情况下都如此。然而,它是在这个条件下使用的。那可能是 UnboundLocalError
!
作为程序员,我们可以推断出它注意到的代码路径是否受到保护。 else
案例引发了一个不会被捕获的 ValueError
,并且在这两种情况下使用都受到 (el)if dialog
的保护,所以这不会成为问题。
这不是您 IDE 中的错误,因为它正在做它应该做的事情。如果它真的困扰你并且你不能以其他方式消除警告,你可以在第一个 if dialog
的顶部不必要地定义类似 check_dialog = None
的东西,它会关闭。但是,这也不是您的 program/code 的错误,如上所述,它不会导致 UnboundLocalError
。忽略这一点是安全的,并且由于您的 IDE 可能如何工作,错误报告将被关闭。
我的 IDE 警告我在赋值前可能 变量引用 。但我很难发现它。我已准备好提交错误报告,但也许您可以看到我没有看到的内容。
有问题的变量是一个命名的 check_dialog
并且 赋值前的引用 警告发生在我为您标记的行中以下代码片段的末尾:
if dialog:
validate = None
string = False
if dialog == Prompt.YES | Prompt.NO:
check_dialog = lambda c: chr(c) in 'yn'
elif dialog == Prompt.CONTINUE | Prompt.QUIT:
check_dialog = lambda c: chr(c) in 'cq'
elif dialog == Prompt.YES | Prompt.NO | Prompt.QUIT:
check_dialog = lambda c: chr(c) in 'ynq'
else:
raise ValueError('Invalid dialog argument.')
answer = None
while not answer:
self.addstr(0, 1, prompt)
if string:
curses.curs_set(True)
curses.echo()
answer = self.getstr(1, 3)
curses.noecho()
curses.curs_set(False)
elif dialog:
while not check_dialog(answer): # warning here!
answer = self.getch()
else:
answer = self.getch()
您的 IDE 并不是 "thinking" 变量的每个可能值(在大多数情况下,这是不可能的),而是使用启发式方法来防止常见错误。在这种情况下,它注意到 check_dialog
是在 if 条件中定义的,但并非在所有情况下都如此。然而,它是在这个条件下使用的。那可能是 UnboundLocalError
!
作为程序员,我们可以推断出它注意到的代码路径是否受到保护。 else
案例引发了一个不会被捕获的 ValueError
,并且在这两种情况下使用都受到 (el)if dialog
的保护,所以这不会成为问题。
这不是您 IDE 中的错误,因为它正在做它应该做的事情。如果它真的困扰你并且你不能以其他方式消除警告,你可以在第一个 if dialog
的顶部不必要地定义类似 check_dialog = None
的东西,它会关闭。但是,这也不是您的 program/code 的错误,如上所述,它不会导致 UnboundLocalError
。忽略这一点是安全的,并且由于您的 IDE 可能如何工作,错误报告将被关闭。