Извините, если это вопрос новичков, но у меня возникли проблемы с перехватом исключения тайм-аута в Python 3.3, работающего на win7, например.Catching TimeoutExpired exception в Python 3.3
import subprocess
try:
subprocess.call("ping -t localhost", timeout=3)
except TimeoutExpired:
print("Timeout happened.\n")
Таймаут работает отлично, и в соответствии с моим PDB TRACEBACK, он говорит: "raise TimeoutExpired(self.args, timeout)"
еще "кроме TimeoutExpired:" не поймать его. Кроме того, TimeoutExpired не указан как стандартное исключение и выходит как имяError.
Если я пытаюсь "except TimeoutError:"
вместо "except TimeoutExpired:"
, я не получаю сообщение об ошибке, но в PDB, я получаю:
"Uncaught exception"
и команда печати не получает выполняется в любом случае.
Это ошибка, или я делаю что-то неправильно?
Да, но subprocess.TimeoutExpired конечно должен быть получен из TimoutError ... not Exception. Я думаю, что это был недосмотр –
Возможно. Я мог ошибаться, но я думаю, что они выбрали подкласс из SubprocessError, потому что это не было исключением в контексте самой программы Python, а из дочернего процесса, который он контролировал. –