С кодом блока:Python функция триггера поднять исключение, не изменяя его
1 import re
2 import sys
3 import traceback
4
5 def foo(arg):
6 if isinstance(arg, dict):
7 return arg.get('key', 0)
8 return 0
9
10 arg = {}
11
12
13
14 try:
15 foo(arg)
16 except Exception:
17 lines = traceback.format_exception(*sys.exc_info())
18 for line in lines:
19 m = re.match(r' File .*, line (\d+), in foo\n.*\n', line)
20 if m and int(m.group(1)) < 5:
21 print("Foo threw!")
22 sys.exit()
23 raise
24 else:
25 sys.stderr.write("foo did not throw!")
Возникает вопрос: могу ли я добавить код логики между линией 10-14, таким образом, сделать окончательный поток управления код может достигать в строка , где Foo threw!
распечатано? Внимание, что коды между строками 1-10 и после строки 14 НЕ МОЖЕТ быть изменен.
Я пытался написать еще одну функцию, чтобы вызвать исключение, заменить foo()
с ним, он не работает, так как if
в строке 20, тест против < 5
, «защитить» произошло исключение перед строкой 5.
В чем ваш вопрос? Вы просите нас написать код для размещения между строками 10 и 14? Если да, то что вы пробовали, и где именно ваши трудности? –