2013-10-14 4 views
5

Извините, если это вопрос новичков, но у меня возникли проблемы с перехватом исключения тайм-аута в 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"

и команда печати не получает выполняется в любом случае.

Это ошибка, или я делаю что-то неправильно?

ответ

7

TimeoutExpired не определяется глобально; вместо этого используйте subprocess.TimeoutExpired.

+0

Да, но subprocess.TimeoutExpired конечно должен быть получен из TimoutError ... not Exception. Я думаю, что это был недосмотр –

+0

Возможно. Я мог ошибаться, но я думаю, что они выбрали подкласс из SubprocessError, потому что это не было исключением в контексте самой программы Python, а из дочернего процесса, который он контролировал. –