Python 局部变量'';分配前参考

Python 局部变量'';分配前参考,python,python-2.7,Python,Python 2.7,我是Python新手,今天下午遇到了这个错误。我试图通过在previous变量之前添加global来解决此问题,但我继续遇到此错误: Traceback (most recent call last): File "send.py", line 76, in <module> main(sys.argv[1:]) File "send.py", line 34, in main send() File "send.py", line 29, in send if

我是Python新手,今天下午遇到了这个错误。我试图通过在
previous
变量之前添加
global
来解决此问题,但我继续遇到此错误:

Traceback (most recent call last):
  File "send.py", line 76, in <module>
main(sys.argv[1:])
  File "send.py", line 34, in main
send()
  File "send.py", line 29, in send
    if data != previous:

这里有嵌套的作用域:

def main(argv):
    ...
    global previous
    ...
    def send():
        ...
        if data != previous:
main
函数中声明全局不适用于本地in
send
函数

您可以将
previous
的全局声明移动到
send
方法的开头。您可以完全删除
bridge
的全局声明


更好的是,重构代码,不要使用嵌套的作用域和全局变量

这里有嵌套的作用域:

def main(argv):
    ...
    global previous
    ...
    def send():
        ...
        if data != previous:
main
函数中声明全局不适用于本地in
send
函数

您可以将
previous
的全局声明移动到
send
方法的开头。您可以完全删除
bridge
的全局声明


更好的是,重构代码,不要使用嵌套的作用域和全局变量

您应该发布回溯,以便我们可以查看错误的详细信息。另外,
BridgeClient
导入可能不相关,但会导致无法测试您的代码。发布一些较小的内容来说明问题。您可以复制此文件并删除其中的一半,包括套接字调用。不要使用
global
,也不要使用嵌套函数。@tdelaney我已经更新了我的post@Daniel我使用嵌套函数来控制计时器。也许我错了,但我在某个地方读到,这种技术比sleep()函数更好。我不太了解Python中的良好实践(我是新手!),但如果您说嵌套函数是一种不好的实践,我将尝试避免这种情况@丹尼尔,这是一个相当宽泛的说法。嵌套函数并没有什么错——更恰当地称之为“闭包”——特别是在像计时器一样安排未来的工作时。这个特定的实现需要一些修复,但总体来说这不是一个坏策略。您应该发布回溯,以便我们可以查看错误的详细信息。另外,
BridgeClient
导入可能不相关,但会导致无法测试您的代码。发布一些较小的内容来说明问题。您可以复制此文件并删除其中的一半,包括套接字调用。不要使用
global
,也不要使用嵌套函数。@tdelaney我已经更新了我的post@Daniel我使用嵌套函数来控制计时器。也许我错了,但我在某个地方读到,这种技术比sleep()函数更好。我不太了解Python中的良好实践(我是新手!),但如果您说嵌套函数是一种不好的实践,我将尝试避免这种情况@丹尼尔,这是一个相当宽泛的说法。嵌套函数并没有什么错——更恰当地称之为“闭包”——特别是在像计时器一样安排未来的工作时。这个特定的实现需要一些修复,但总体而言,这是一个不错的策略。