Python 局部变量'';分配前参考
我是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
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
函数中声明全局不适用于本地insend
函数
您可以将previous
的全局声明移动到send
方法的开头。您可以完全删除bridge
的全局声明
更好的是,重构代码,不要使用嵌套的作用域和全局变量 这里有嵌套的作用域:
def main(argv):
...
global previous
...
def send():
...
if data != previous:
在main
函数中声明全局不适用于本地insend
函数
您可以将previous
的全局声明移动到send
方法的开头。您可以完全删除bridge
的全局声明
更好的是,重构代码,不要使用嵌套的作用域和全局变量 您应该发布回溯,以便我们可以查看错误的详细信息。另外,
BridgeClient
导入可能不相关,但会导致无法测试您的代码。发布一些较小的内容来说明问题。您可以复制此文件并删除其中的一半,包括套接字调用。不要使用global
,也不要使用嵌套函数。@tdelaney我已经更新了我的post@Daniel我使用嵌套函数来控制计时器。也许我错了,但我在某个地方读到,这种技术比sleep()函数更好。我不太了解Python中的良好实践(我是新手!),但如果您说嵌套函数是一种不好的实践,我将尝试避免这种情况@丹尼尔,这是一个相当宽泛的说法。嵌套函数并没有什么错——更恰当地称之为“闭包”——特别是在像计时器一样安排未来的工作时。这个特定的实现需要一些修复,但总体来说这不是一个坏策略。您应该发布回溯,以便我们可以查看错误的详细信息。另外,BridgeClient
导入可能不相关,但会导致无法测试您的代码。发布一些较小的内容来说明问题。您可以复制此文件并删除其中的一半,包括套接字调用。不要使用global
,也不要使用嵌套函数。@tdelaney我已经更新了我的post@Daniel我使用嵌套函数来控制计时器。也许我错了,但我在某个地方读到,这种技术比sleep()函数更好。我不太了解Python中的良好实践(我是新手!),但如果您说嵌套函数是一种不好的实践,我将尝试避免这种情况@丹尼尔,这是一个相当宽泛的说法。嵌套函数并没有什么错——更恰当地称之为“闭包”——特别是在像计时器一样安排未来的工作时。这个特定的实现需要一些修复,但总体而言,这是一个不错的策略。