Я получаю исключение глубоко в некотором цикле в функции в длительном процессе. Если я получаю исключение, я хотел бы зарегистрировать вещь, которая находится в индексе в цикле, в котором произошло исключение. К сожалению, нужная мне информация не доступна в текущей функции ... она находится в следующей функции в стеке. Однако индекс не доступен в следующей функции вверх по стеку, он доступен только в текущей функции. Поэтому для записи соответствующей информации мне нужна информация из двух вызовов функций на разных уровнях вложенности. Как передать информацию между функциями в Exception
?
Например:
def foo():
information_I_need = ["some", "arbitrary", "things"]
data_operated_on = list(range(0, 10*len(information_I_need), 10)) #0,10,20
#NB: these two lists are the same size
try:
bar(data_operated_on)
except ValueError as e:
i = e.get_the_index_where_bar_failed()
print(information_I_need[i])
def bar(aoi):
for i in range(len(aoi)):
try:
fails_on_10(aoi[i])
except ValueError as e:
e.add_the_index_where_bar_failed(i)
raise e
def fails_on_10(n):
if n == 10:
raise ValueError("10 is the worst!")
Ожидаемое поведение здесь будет таким, что вызов foo()
печатает "arbitrary"
.
В этом примере bar
содержит информацию (а именно, индекс i
), которая необходима foo
для правильного сообщения о проблеме. Как я могу получить эту информацию от bar
до foo
?