Ответ 1
Я считаю, что ответ можно найти в исходный код для 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
установлен, тогда попытка использовать недопустимый тип исключения в блоке исключений покажет предупреждение.
Этот флаг устанавливается добавлением флага -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