Python中文
首页
教程
问答
标签
搜索
登录
注册
NameError表示变量未定义,但仅在某些地方定义
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我尝试实现一个保持活动,每30秒发送一些数据,以保持telnet连接打开。在</p> <p>我的代码每秒调用<code>reinitScore</code>。此函数有时会调用<code>calculateWinner</code>,后者通过<code>stelnet.send(data)</code>通过telnet发送数据。在</p> <p>问题是,当我在任何函数中调用<code>stelnet.send(data)</code>时,它会引发一个<code>NameError: global name 'stelnet' is not defined</code>。在</p> <p>我的问题是:为什么<code>stelnet.send(data)</code>会在一个地方工作,而不是在另一个地方?在</p> <p>下面是我的代码中有关telnet传输和函数调用的部分:</p> <pre><code>import socket, select, string, sys import string import threading leftKeyCounter = 0 rightKeyCounter = 0 frontKeyCounter = 0 backKeyCounter = 0 # function called by reinitScore def calculateWinner(d): scores = {} high_score = 0 for key, value in d.items(): try: scores[value].<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(key) except KeyError: scores[value] = [key] if value > high_score: high_score = value results = scores[high_score] if len(results) == 1: print results[0] stelnet.send(results[0]) return results[0] else: print 'TIE' return 'TIE', results #called once and repeat itselfs every second def reinitScore(): threading.Timer(1, reinitScore).start() #globaling for changing the content global leftKeyCounter global rightKeyCounter global frontKeyCounter global backKeyCounter values = {'left' : leftKeyCounter, 'right' : rightKeyCounter, 'front' : frontKeyCounter, 'back' : backKeyCounter} if (leftKeyCounter != 0 or rightKeyCounter != 0 or frontKeyCounter != 0 or backKeyCounter != 0): calculateWinner(values) leftKeyCounter = 0 rightKeyCounter = 0 frontKeyCounter = 0 backKeyCounter = 0 print "back to 0" reinitScore() if __name__ == "__main__": if(len(sys.argv) < 3) : print 'Usage : python telnet.py hostname port' sys.exit() host = sys.argv[1] port = int(sys.argv[2]) stelnet = socket.socket(socket.AF_INET, socket.SOCK_STREAM) stelnet.settimeout(2) # connect to remote host try : stelnet.connect((host, port)) except : print 'Unable to connect' sys.exit() print 'Connected to remote host' while True: // ... Some code that has nothing to do with telnet while 1: socket_list = [sys.stdin, stelnet] read_sockets, write_sockets, error_sockets = select.select(socket_list , [], []) for sock in read_sockets: if sock == stelnet: data = sock.recv(4096) if not data : print 'Connection closed' sys.exit() else : sys.stdout.write(data) else : msg = sys.stdin.readline() stelnet.send(msg) </code></pre> <p>我试图在很多地方将<code>stelnet</code>声明为<code>global</code>变量,但它不会改变任何东西——我总是得到“未定义”<code>NameError</code>。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>您的代码无法工作,因为您没有将<code>stelnet</code>传递给函数。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何添加虚拟方法
3 回答
如何添加表示整数的擦边字符串?
4 回答
如何添加要在Bokeh中使用的新font.ttf文件?
8 回答
如何添加要显示的矩阵XY轴编号和XY轴
1 回答
如何添加计数?
4 回答
如何添加计数器函数?
5 回答
如何添加计数器列来计算数据帧中另一列中的特定值?
8 回答
如何添加计数器来跟踪while循环中的月份和年份?
7 回答
如何添加计数并删除countplot的顶部和右侧脊椎?
1 回答
如何添加计时器wx.应用程序更新窗口对象的主循环?
10 回答
如何添加评论到帖子?PostDetailVew,Django 2.1.5
5 回答
如何添加评论拉梅尔亚姆
6 回答
如何添加诸如矩阵Python/Pandas之类的数据帧?
7 回答
如何添加谷歌地点自动完成到Flask?
5 回答
如何添加超时、python discord bot
7 回答
如何添加超过1dp的检查
1 回答
如何添加距离方法
1 回答
如何添加跟随游戏的敌人精灵
6 回答
如何添加路径以便python可以找到程序?
1 回答
如何添加身份验证/安全性以使用happybase访问HBase?
8 回答