【问题标题】:local variable referenced before assignment with try and except statement [duplicate]在使用 try 和 except 语句赋值之前引用的局部变量 [重复]
【发布时间】:2013-08-12 19:17:04
【问题描述】:

我在使用 try 和 except 语句时遇到了一些问题,我有一个输入小部件,它接受字符串中的输入,但我有稍后将其转换为整数的代码,问题是如果用户输入类似文本的内容,它会抛出一个像这样的错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.2/tkinter/__init__.py", line 1402, in __call__
    return self.func(*args)
  File "/home/ppppwn3d/workspace/Python/JailBreakBob/JailBreakBob.py", line 157, in buttonclick_gamescreen
    entryx = int(e1.get())
ValueError: invalid literal for int() with base 10: 'abc'

所以我想用 try 和 except 语句隐藏错误,但我现在收到另一条错误消息。

这就是它在代码中的样子。

    while pressed == 8 :
        try:
            entryx = int(e1.get())
            entryy = int(e2.get())
        except ValueError:
            print("text")

        answerx = answerlistx[randomimage]
        answery = answerlisty[randomimage]
    
        if entryx == answerx and entryy == answery
            canvas.delete(images)
            randomimage = random.randrange(0,49+1)
            scorecounter = scorecounter + 1
            game = PhotoImage(file=imagelist[randomimage])
            images = canvas.create_image(30, 65, image = game, anchor = NW)
            e1.delete(0, END)   
            e2.delete(0, END)
            pressed = ''
        if entryx > 10 or entryx < -10 or entryy > 10 or entryy < -10 :
            wrong = canvas.create_image(30, 65, image = outside, anchor = NW)
            e1.delete(0, END)   
            e2.delete(0, END)
            pressed = ''
        else:
            wrong = canvas.create_image(30, 65, image = incorrect, anchor = NW)
            e1.delete(0, END)   
            e2.delete(0, END)
            pressed = ''

新的错误信息:

text
Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.2/tkinter/__init__.py", line 1402, in __call__
    return self.func(*args)
  File "/home/ppppwn3d/workspace/Python/JailBreakBob/JailBreakBob.py", line 165, in buttonclick_gamescreen
    if entryx == answerx and entryy == answery:
UnboundLocalError: local variable 'entryx' referenced before assignment

我无法弄清楚为什么会发生这种情况以及如何解决它,因此我们将不胜感激。

【问题讨论】:

    标签: python try-catch


    【解决方案1】:

    要添加到@alecxe's answer,我宁愿像这样修改程序:

        entryx, entryy = 0, 0
        try:
            entryx = int(e1.get())
            entryy = int(e2.get())
        except ValueError:
            print("text")
    

    基本上,错误的意思是,如果发生错误,entryx, entryy 永远不会被分配任何东西,但仍会在稍后的 if..else 检查中被引用。

    最好为try..except 块之外的变量设置默认值。

    【讨论】:

      【解决方案2】:

      如果您的 try/except 块中有异常,则该范围内不会定义 entryxentryy 变量。

      您应该抛出错误并退出程序,或者在except 块中分配entryxentryy 默认值。

      此外,您可以创建一个 while 循环,直到用户输入一个整数,就像建议的 here 一样。

      【讨论】:

        【解决方案3】:

        我会在 try 块开始之前用 None 初始化 answerx, answery。

        【讨论】:

          【解决方案4】:

          您可以看到“文本”消息。
          因此,引发了异常并且 entryx 没有被初始化。
          这就是为什么你有:

          local variable 'entryx' referenced before assignment
          

          【讨论】:

            猜你喜欢
            • 2022-11-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-02
            • 1970-01-01
            • 1970-01-01
            • 2013-02-28
            相关资源
            最近更新 更多