Python: пытался использовать ответ SO, получая --> NameError: имя «тайм-аут» не определено

Из этот вопрос я попытался выполнить ответ Максима Скурыдина (3-й ответ по состоянию на 03 января 2020 г., 18:33 по тихоокеанскому времени), но я получаю NameError: name 'timeout' is not defined.

Я пытаюсь использовать TRY EXCEPT, чтобы поймать тайм-аут при использовании сокетов. Я начал с листинга 11. Простой эхо-сервер дейтаграмм Python из учебника IBM Программирование сокетов в 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. Обработка исключений... В последнем предложении, кроме исключений, могут быть опущены имена исключений, чтобы они служили подстановочными знаками. Используйте это с особой осторожностью, так как таким образом легко замаскировать настоящую программную ошибку!). Пытаясь последовать этому совету, я нашел ответ (упомянутый выше), который показался мне идеально подходящим, и я подумал, что следовал ему правильно. Что я делаю не так?


person TRS-80    schedule 04.01.2021    source источник
comment
Код, который вы скопировали, по-видимому, содержал строку типа from socket import timeout, чтобы фактически ввести определение этого имени.   -  person jasonharper    schedule 04.01.2021
comment
У него уже есть import socket, разве это уже не from socket import timeout?   -  person TRS-80    schedule 04.01.2021
comment
@TRS-80: У него уже есть import socket, разве это уже не распространяется на from socket import timeout? - Только с import socket вам нужно будет использовать socket.timeout вместо только timeout.   -  person Steffen Ullrich    schedule 04.01.2021