Python:尝试使用 SO 答案,得到 --> NameError: name 'timeout' is not defiined

时间:2021-01-04 04:06:31

标签: python sockets python-sockets

this question 开始,我尝试按照 Maksim Skurydzin 的回答(截至 2020 年 1 月 1 日下午 6:33 PST 的第三个回答),但我得到了 NameError: name 'timeout' is not defined

我正在尝试使用 TRY EXCEPT 在使用套接字时捕获超时。我从 IBM tutorial "Sockets programming in 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 文档不鼓励以这种方式使用 except(8.3. 处理异常...“最后一个 except 子句可能会省略异常名称,用作通配符。使用它要格外小心,因为这样很容易掩盖真正的编程错误!”)。为了遵循这个建议,我找到了一个看起来非常合适的答案(上面提到的),我认为我正确地遵循了它。我做错了什么?

0 个答案:

没有答案