&引用;名称错误:全局名称';ser';“未定义”;python推特

&引用;名称错误:全局名称';ser';“未定义”;python推特,python,pyserial,Python,Pyserial,我在Python中有以下问题,但我不知道为什么: "Traceback (most recent call last): File C:/Users/W7-32/Downloads/TW31.py", line 82, in <module> driptwit() ## Llamada a la funcion driptwit File "C:/Users/W7-32/Downloads/TW31.py", line 71, in driptwit ser

我在Python中有以下问题,但我不知道为什么:

"Traceback (most recent call last):   File
C:/Users/W7-32/Downloads/TW31.py", line 82, in <module>
    driptwit()  ## Llamada a la funcion driptwit   File "C:/Users/W7-32/Downloads/TW31.py", line 71, in driptwit
    ser.write("1") NameError: global name 'ser' is not defined
虽然端口已连接Arduino,但它给了我未定义的错误

以下是.py归档文件:


我使用Pycharm和Python2.7解释器,Windows7 32位。

ser
不是全局变量。您在for循环中定义它,因此其范围仅限于该循环。在for循环上方执行以下操作:

ser = None
for device in locations:
这使得它的范围不仅仅局限于for循环。for循环现在将使用在循环中调用它时刚刚定义的变量。 然后,在函数体中,您需要在顶部添加
global
关键字,以确保调用
ser
时得到的是全局变量,而不是试图创建新变量。像这样:

def checkokay():
     global ser
     ser.flushInput()
在另一个函数中也是如此:

def driptwit():
     global ser
     status = []

现在,您的变量是全局变量,您的函数正在使用该变量的全局版本。

请在问题中显示您的代码。您很可能试图使用拼写错误或超出范围的名称。Seconded。除了像Mega这样的链接是可疑的这一事实之外,你应该将你的代码简化为一个代码来隔离问题,而不是要求我们花时间做同样的事情,因为社区免费提供帮助。准备好了吗,现在正确了吗?谢谢
def driptwit():
     global ser
     status = []