try-except не перехватывает исключения
try:
print('=====ДО=====')
os.remove(file)
print('=====ПОСЛЕ=====')
except:
print('Этот принт выполняется')
exit(f'Не удаляется {file}')
Впервые с таким сталкиваюсь. Может быть кто знает объяснение. Блок except не срабатывает.
def rrr():
try:
1/0
except:
exit(10000)
try:
rrr()
except:
print(54545)
выполнение rrr() - дает вывод 10000 выполнение всего кода давет вывод 54545, хотя ожидал того же 10000
Выполнение в консоли:
Выполнение во вкладке RUN. Результат неожиданно разный.
Ответы (1 шт):
Ну на самом деле вы просто не понимаете, как в питоне происходит выход из программы по sys.exit. При этом просто бросается исключение SystemExit. Так устроен питон. И это исключение ловится у вас во внешнем блоке try/except. Именно поэтому важно прописывать конкретные исключения, которые вы хотите ловить в блоке except, а не ловить все исключения подряд.
Если ловить хотя бы Exception, то SystemExit уже не поймается:
try:
rrr()
except Exception:
print(54545)
Вывод:
SystemExit: 10000
Это потому, что исключение SystemExit унаследовано от BaseException, а не от Exception.
Почему получается разный результат в консоли и в PyCharm не подкажу, но, видимо, это тоже как-то завязано на обработку исключения SystemExit самой средой выполнения (интерактивным питоном в каком-то из случаев, видимо).

