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

2024-05-08 06:30:42 发布

您现在位置: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行之间添加一些代码逻辑,从而使最终的代码控制流可以到达第21行Foo threw!打印出来的地方?注意,1-10行和14行之后的代码不能修改。你知道吗

我试图编写另一个函数来引发一个异常,用它替换foo(),它没有工作,因为第20行的if测试< 5,“保护”异常发生在第5行之前。你知道吗


Tags: 代码inimportrereturniffoodef
1条回答
网友
1楼 · 发布于 2024-05-08 06:30:42

不,因为这些线:

m = re.match(r'  File .*, line (\d+), in foo\n.*\n', line)
if m and int(m.group(1)) < 5

这意味着错误必须发生在foo之前的第1-4行中,因此即使在foo的第一行中添加错误也是不可能的。你知道吗

相关问题 更多 >