Из этот вопрос я попытался выполнить ответ Максима Скурыдина (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. Обработка исключений... В последнем предложении, кроме исключений, могут быть опущены имена исключений, чтобы они служили подстановочными знаками. Используйте это с особой осторожностью, так как таким образом легко замаскировать настоящую программную ошибку!). Пытаясь последовать этому совету, я нашел ответ (упомянутый выше), который показался мне идеально подходящим, и я подумал, что следовал ему правильно. Что я делаю не так?
from socket import timeout
, чтобы фактически ввести определение этого имени. - person jasonharper   schedule 04.01.2021import socket
, разве это уже неfrom socket import timeout
? - person TRS-80   schedule 04.01.2021import socket
, разве это уже не распространяется наfrom socket import timeout
? - Только сimport socket
вам нужно будет использоватьsocket.timeout
вместо толькоtimeout
. - person Steffen Ullrich   schedule 04.01.2021