РЕДАКТИРОВАТЬ: Ответ ниже был для Python 3, я не понял вопрос, связанный с Python 2.7.в Python 2, как кажется, интерпретатор не жалуется, если выражение после except
не приводит к подтипу BaseException
.Тем не менее, поведение по-прежнему неправильное, оно просто игнорирует этот блок except
во всех случаях.
Это забавная конструкция, синтаксически допустимая, но семантически неверная.Я предполагаю, что автор кода хотел выразить что-то вроде «запустить этот блок except
для любого типа исключения, кроме ExampleError
».Однако то, что на самом деле происходит, выглядит примерно так:
try:
# ...
except (not bool(ExampleError)):
# ...
Когда в блоке try
возникает исключение, Python просматривает различные блоки except
в поисках блока, соответствующего типу исключения.Когда он видит except not ExampleError
, эквивалентный except (not bool(ExampleError))
, это приводит к except False
, что недопустимо, поскольку False
не является подтипом BaseException
(или кортежем подтипов BaseException
).Таким образом, код может даже выполняться, если не возникает никаких исключений, но это неправильно.