Допустим, у меня есть следующий поток выполнения:Исключение просачивания в Linux/питон
def method1:
try:
method2()
except Exception as e:
handle_exception()
def method2:
command = "<some linux command>"
status = execute_command(command)
if status != 0:
log_exception()
def execute_command(command):
subprocess.popen(command, <other params>)
method1()
command.py
with open(path, 'w') as f: #this raises IOError
#do something
Будет handle_exception()
называться? Мое понимание трассировки будет напечатано вместо этого, поскольку исключение не будет просачиваться до method1
. И это потому, что execute_command(..)
породит другой процесс, который будет иметь собственный стек вызовов. Правильно ли я понимаю?
Из кода, который вы указали, да, 'handle_exception' будет вызываться, потому что' method2' вызывает исключение или, более явно, 'execute_command' вызывает исключение, которое не обрабатывается' method2', таким образом оно поднимается в стек вызовов. –
Почему бы вам не попробовать запустить несколько команд 'print()', чтобы увидеть, что он делает? Я нашел, что это отличный способ узнать такие вещи :-) – Carpetsmoker
И следите, когда вы редактируете свои сообщения, вы просто отказались от всего форматирования, которое я сделал –