Python:尝试使用SO answer,getting>NameError:未定义名称“timeout”

2024-10-01 22:43:02 发布

您现在位置:Python中文网/ 问答频道 /正文

this question开始,我试着按照Maksim Skurydzin的答案(截至太平洋标准时间2020-01-03@6:33的第三个答案)进行回答,但我得到了^{

我正在尝试使用TRY-EXCEPT来捕获使用套接字时的超时。我从IBM tutorial "Sockets programming in Python"中的“清单11.简单Python数据报echo服务器”开始:

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.处理异常…”“最后一个exception子句可能会省略异常名称作为通配符。使用时要格外小心,因为这样很容易掩盖真正的编程错误!”)。为了遵循这个建议,我找到了(上面提到的)答案,这个答案看起来非常合适,我认为我正确地遵循了它。我做错了什么


Tags: 答案importbindportmsgsocketsockaddr

热门问题