#python #python-3.6 #try-except
#python #python-3.6 #try-except
Вопрос:
Я нахожусь в процессе изучения предложения python try: except
У меня есть следующая иерархия вызовов
def A():
try:
B(some_args)
except Exception as e:
print (repr(e))
B реализован следующим образом
def B(some_args):
C(some_args)
Обратите внимание, что нет попытки, кроме как внутри B
У меня есть try except внутри C следующим образом
def C():
try:
dothis()
except exception as e:
raise e
Мой вопрос заключается в том, что если одна из функций в иерархии вызовов (в данном случае B)
A()
calls B()
calls C()
не содержит предложения try except, будет ли A по-прежнему получать исключение, созданное в C ()?
Комментарии:
1. Да, другими словами, вам не нужен try-except внутри промежуточных функций, таких как B в вашем примере. При этом часто бывает разумно спроектировать его таким образом, чтобы более общие исключения обрабатывались на более высоком уровне (т. Е. A не нужно беспокоиться о спецификациях G или H).
Ответ №1:
Да, это было бы. Блок try / catch будет перехватывать любое исключение, генерируемое внутри блока try, независимо от того, насколько глубоко находится место, где оно генерируется.
Кроме того, вы можете перехватывать определенные исключения на разных уровнях, поэтому может случиться так, что блок catch в B может перехватить одно генерируемое исключение, тогда как блок catch в A будет перехватывать разные исключения, каждое из которых, возможно, генерируется в C или даже какой-либо другой функции, которую C вызывает, и т.д. Например:
catch FileNotFoundException as ex:
перехватил бы FileNotFoundException, но не другие исключения