首页 > 解决方案 > Python:尝试使用 SO 答案,得到 --> NameError: name 'timeout' is not defined

问题描述

这个问题中,我尝试遵循 Maksim Skurydzin 的答案(截至 2020 年 1 月 3 日 @ 下午 6:33 PST 的第三个答案),但我得到了NameError: name 'timeout' is not defined

我正在尝试使用 TRY EXCEPT 在使用套接字时捕获超时。我从IBM 教程“Python 中的套接字编程”中的“清单 11. 简单 Python 数据报回显服务器”开始:

import socket

dgramSock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
dgramSock.bind( ('', 23000) )

while 1:

    msg, (addr, port) = dgramSock.recvfrom( 100 )
    dgramSock.sendto( msg, (addr, port) )

我只是添加了几行来得到这个:

import socket
from time import sleep
dgramSock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
dgramSock.bind(('', 62020))
dgramSock.setblocking(0)

while 1:
    try:
        msg, (addr, port) = dgramSock.recvfrom(64)
        print msg
        dgramSock.sendto(msg, (addr, port))        
    except timeout:
        sleep(.001)

当我尝试运行它时会出现上述错误。except timeout:当我更改为时,这会按照我想要的方式工作except:,但是 Python Docs 不鼓励使用except这种方式(8.3。处理异常......“最后一个 except 子句可能会省略异常名称,以用作通配符。使用这个非常小心,因为用这种方式很容易掩盖真正的编程错误!”)。为了遵循这个建议,我找到了看起来非常合适的答案(上面提到的),我认为我正确地遵循了它。我究竟做错了什么?

标签: pythonsocketspython-sockets

解决方案


推荐阅读