【问题标题】:what does this Unresolved reference mean?这个未解决的参考是什么意思?
【发布时间】:2015-07-06 19:49:10
【问题描述】:

我正在尝试通过在 python 中增加一个变量来计算鼠标点击次数。

from tkinter import *
import serial, time
root = Tk()

ser = serial.Serial()
ser.baudrate=9600
ser.port=0

x = 0
def leftClix(event):
    print("Left")
    if x == 3:
        exit(0)
    else:
        x=x+1
def rightClix(event):
    print("Right")

def middleClix(event):
    print("Middle")

frame = Frame(root, width=300, height=250)
frame.bind("<Button-1>", leftClix)
frame.bind("<Button-2>", middleClix)
frame.bind("<Button-3>", rightClix)
frame.pack()

root.mainloop()

在 PyCharm 中,x+1 中的“x”带有下划线注释:未解析的引用:

当我单击鼠标左键时,我得到“UnboundLocalError: local variable 'x' referenced before assignment”

这是什么意思?我之前分配的...所以我不明白。我尝试将 x 设为全局,但这并没有帮助。有人可以解释我在这里做错了什么吗?

【问题讨论】:

  • 假设x 是本地的。将 global x 放入你的函数中,这样它就知道你的意思是一个全局变量。
  • 当您说“尝试使 x 成为全局”时——尝试如何确切地,您将global x 声明放在哪里?它需要进入函数内部
  • @khelwood 所说的 - 应该让它成为一个答案,以便它可以被接受

标签: python increment


【解决方案1】:

正如@khelwood 所说,像这样将x 标记为全局:

def leftClix(event):
  global x
  ...
  x = x + 1

这出现在Python Programming FAQ

【讨论】:

  • 如果我在函数中分配 x,每次事件发生时,x 将为零。我想在每次发生事件时增加 x 。我也很困惑为什么我不能在将 x 声明为全局时为其赋值。
  • 好的,我明白了,我在函数外部为 x 分配了一个值,然后将其声明为全局并且有效。
猜你喜欢
  • 2014-08-13
  • 2020-05-12
  • 1970-01-01
  • 2018-03-30
  • 2021-05-20
相关资源
最近更新 更多