Почему не исключает, что объект поймает все в Python?

Ссылка на язык python указывается в разделе 7.4 :

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

Итак, почему не except object: поймать все? object – это базовый класс всех классов исключений, поэтому except object: должен улавливать каждое исключение.

Например, это должно захватывать AssertionError

 print isinstance(AssertionError(), object) # prints True try: raise AssertionError() except object: # This block should execute but it never does. print 'Caught exception' 

One Solution collect form web for “Почему не исключает, что объект поймает все в Python?”

Я считаю, что ответ можно найти в исходном коде для python 2.7 :

  else if (Py_Py3kWarningFlag && !PyTuple_Check(w) && !Py3kExceptionClass_Check(w)) { int ret_val; ret_val = PyErr_WarnEx( PyExc_DeprecationWarning, CANNOT_CATCH_MSG, 1); if (ret_val < 0) return NULL; } 

поэтому, если w (я предполагаю, что выражение в инструкции except ) не является кортежем или классом исключений, и установлен Py_Py3kWarningFlag тогда попытка использования недопустимого типа исключения в блоке except покажет предупреждение.

Этот флаг устанавливается добавлением флага -3 при выполнении вашего файла:

 Tadhgs-MacBook-Pro:~ Tadhg$ python2 -3 /Users/Tadhg/Documents/codes/test.py True /Users/Tadhg/Documents/codes/test.py:5: DeprecationWarning: catching classes that don't inherit from BaseException is not allowed in 3.x except object: Traceback (most recent call last): File "/Users/Tadhg/Documents/codes/test.py", line 4, in <module> raise AssertionError() AssertionError 
  • Есть ли какая-либо реализация Python2, где упорядочение является транзитивным?
  • Почему мы не можем «самоплатить» в метод?
  • Как получить пользовательский ввод с клавиатуры в Python 2?
  • Вход в командную строку вызывает SyntaxError
  • Как Python сравнивает строку и int?
  • Может кто-нибудь объяснить это рекурсивным для меня?
  • Печать строки печатает 'u' перед строкой в ​​Python?
  • кастинг необработанных строк python
  • Python - лучший язык программирования в мире.