使用代码块:
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行之间添加一些代码逻辑,从而使最终的代码控制流可以达到行 21 ,其中Foo threw!
打印出来了吗?请注意,不能修改第1-10行和第14行之后的代码。
我曾尝试编写另一个函数来引发异常,将foo()
替换为它,但是自第{20}行if
以来对< 5
进行测试后,它无法正常工作,“保护“在第5行之前发生的例外。
答案 0 :(得分:0)
不,因为这些行:
m = re.match(r' File .*, line (\d+), in foo\n.*\n', line)
if m and int(m.group(1)) < 5
表示错误必须发生在foo
之前的第1-4行,因此如果您向foo
的第一行添加错误,则该错误甚至不可能。