2013-10-11 3 views
8

Есть ли неожиданные побочные эффекты использования "except None"? Поведение, которое я ожидаю, заключается в том, что ничего не поймает тот пункт, который, по-видимому, подтверждает несколько небольших тестов.Python except None

Вот примерный пример того, что я пытаюсь сделать. Когда аргумент не предоставляется функции, exceptions = None, которая создает предложение «except None». Просто хочу дважды проверить, что я не поймаю что-то неожиданное.

# exceptions is exception or set of exceptions I want to do special processing for 
def check_exceptions(exceptions=None) 
    try:                    
    ...                  
    except exceptions as e:              
    ...                 

ответ

8

Прекрасно работает здесь (под Python 2.x).

>>> try: 
... foo 
... except None as e: 
... pass 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
NameError: name 'foo' is not defined 

Для того, за исключением пункта с выражением, что выражение вычисляется, а условие соответствует исключение, если полученный объект «совместимый», за исключением. Объект совместим с исключением, если это класс или базовый класс объекта исключения, или кортеж, содержащий элемент, совместимый с исключением.

source

Поэтому выражение не имеют быть тип исключения, он просто не в состоянии когда-либо совпадают.

Это изменение было изменено в Python 3.x, а выражение после except должно быть потомком BaseException или кортежем такого типа.

+1

@Asad: Вы не можете * поднять * то, что не является потоком «Исключение», но вы можете попытаться * уловить его (хотя каждый раз вы будете терпеть неудачу). –

+0

@ Асад: Ах, я вижу. Похоже, они забыли обновить langref для этого. –

Смежные вопросы