Python触发函数在不修改异常的情况下引发异常

时间:2016-11-06 12:04:25

标签: python exception exception-handling

使用代码块:

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行之前发生的例外。

1 个答案:

答案 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的第一行添加错误,则该错误甚至不可能。