gpt4 book ai didi

python - 我如何知道方法调用可能引发哪些异常?

转载 作者:IT老高 更新时间:2023-10-28 21:33:38 28 4
gpt4 key购买 nike

有没有办法知道(在编码时)执行 python 代码时会出现哪些异常?

我最终会在 90% 的情况下捕获基本异常类,因为我不知道可能会抛出哪种异常类型(阅读文档并不总是有帮助,因为很多时候异常可以从深层传播。而且很多时候文档没有更新或不正确)。

是否有某种工具可以检查这一点(例如通过阅读 Python 代码和库)?

最佳答案

我猜一个解决方案可能只是因为缺少静态类型规则而不够精确。

我不知道有什么工具可以检查异常,但您可以根据自己的需要提出自己的工具(这是玩一些静态分析的好机会)。

作为第一次尝试,您可以编写一个构建 AST 的函数,查找所有 Raise 节点,然后尝试找出引发异常的常见模式(例如直接调用构造函数)

x为以下程序:

x = '''\
if f(x):
raise IOError(errno.ENOENT, 'not found')
else:
e = g(x)
raise e
'''

使用 compiler 包构建 AST:

tree = compiler.parse(x)

然后定义一个Raise访问者类:

class RaiseVisitor(object):
def __init__(self):
self.nodes = []
def visitRaise(self, n):
self.nodes.append(n)

并走AST收集Raise节点:

v = RaiseVisitor()
compiler.walk(tree, v)

>>> print v.nodes
[
Raise(
CallFunc(
Name('IOError'),
[Getattr(Name('errno'), 'ENOENT'), Const('not found')],
None, None),
None, None),
Raise(Name('e'), None, None),
]

您可以继续使用编译器符号表解析符号,分析数据依赖关系等。或者您可以推断,CallFunc(Name('IOError'), ...)“肯定应该意思是提高IOError",这对于快速的实际结果来说是完全可以的:)

关于python - 我如何知道方法调用可能引发哪些异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1591319/

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