У меня есть сценарий, содержащий раздел, подобный этому, на Python 2.6:
import sys
list_id='cow'
prev=[0,'cow']
try:
if list_id==prev[1]:
print '{0} is the same as {1}'.format(list_id,prev[1])
sys.exit(0)
except:
print 'exception occurred, exiting with error'
sys.exit(1)
Я заметил, что, хотя он печатал строку "is same", он также регистрирует исключение!
Если вы удалите блок проб / исключений, интерпретатор не выдаст ошибку.Если вы уловили конкретную ошибку, такую как ValueError, блок исключений не выполняется.
import sys
list_id='cow'
prev=[0,'cow']
try:
if list_id==prev[1]:
print '{0} is the same as {1}'.format(list_id,prev[1])
sys.exit(0)
except Exception as k:
print 'exception occurred, exiting with error. Exception is:'
print k.args
sys.exit(1)
Блок исключений не выполняется, и процесс завершается с кодом возврата 0. Таким образом, исключение выше Исключения вИерархия?
import sys
list_id='cow'
prev=[0,'cow']
try:
if list_id==prev[1]:
print '{0} is the same as {1}'.format(list_id,prev[1])
sys.exit(0)
except BaseException as k:
print 'exception occurred, exiting with error. Exception is:'
print k.args
sys.exit(1)
производит
корова такая же, как произошла исключительная ситуация коровы, выход с ошибкой.
Исключение: (0,)
И процесс завершается с кодом выхода 1.
Почему этот блок Except выполняется вообще?