gpt4 book ai didi

python - 在不需要的系统调用上引发异常

转载 作者:太空狗 更新时间:2023-10-30 02:02:20 25 4
gpt4 key购买 nike

我被告知要修复遗留应用程序中的错误。

我可以重现错误,但我不知道错误确实在哪个 python 源代码行执行。

我可以通过 strace 看到相关的失败:一个文件被打开,它不应该被打开。

我想让相关的 open() linux-syscall 在 python 解释器中引发异常。我的目标:我希望查看堆栈跟踪以修复错误。

这样我就可以避免使用调试器单步执行大量行的耗时。

与其他词相同:如果系统调用被执行,这会导致 open("/somefile", O_RDONLY) = 4 的 strace 输出,python 解释器应该退出并带有回溯。

有人解决吗?

如果你不明白我在找什么,请发表评论。

最佳答案

我们可以在导入模块之前对 open 做一个补丁,这里是一个例子:

test.py 中:

def func():
with open('test', 'w') as f:
pass

test2.py中:

try:
import __builtin__ # for python2
except ImportError:
import builtins as __builtin__ #for python3

import copy
import traceback

orig_open = copy.copy(__builtin__.open)

def myopen(*args):
traceback.print_stack()
return orig_open(*args)

__builtin__.open = myopen

from test import func # Note that we import the module after patching on open()

func()

并且在test2.py中调用func()时,会打印调用栈:

$ python test2.py 
File "test2.py", line 19, in <module>
func()
File "/tmp/test.py", line 4, in func
with open('test', 'w') as f:
File "test2.py", line 12, in myopen
traceback.print_stack()

关于python - 在不需要的系统调用上引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42472864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com