gpt4 book ai didi

python - 检查参数 TypeError 而不执行它

转载 作者:太空宇宙 更新时间:2023-11-03 17:03:38 26 4
gpt4 key购买 nike

关于下面的代码,在执行之前如何知道TypeError?这可能吗?

我的p.py脚本:

class X:

def __init__(self, **kwargs):
pass

x = X(1)

当我编译它时,它没有引发任何错误:

LM-SHC-00950567:test$ python -m py_compile p.py
LM-SHC-00950567:test$ python -m compileall p.py

但是当我执行它时,它会:

LM-SHC-00950567:test$  python p.py
Traceback (most recent call last):
File "p.py", line 7, in <module>
x = X(1)
TypeError: __init__() takes 1 positional argument but 2 were given

最佳答案

how can I know the TypeError before execute it? is it possible?

仅使用python,你不能。 Python 是一种动态语言不是静态语言。在执行之前它不会执行任何检查来查看是否有错误,它只是执行。如果您犯了像您一样的概念错误,那是您的错。

当然,您可以为此使用静态检查工具。最近由于类型提示而引起关注的一个候选者是 mypy ,一个静态检查器,除其他很酷的功能外,它还可以捕获此类错误。

在脚本上运行 mypy 会产生:

(Python3)jim@jim: mypy p.py 
p.py:6: error: Too many arguments for "X"

所以它不需要执行就捕获了它。

<小时/>

一般来说,执行这样的检查并不是 python 的目的。在Python中,我们首先try,然后捕获 exceptions( EAFP 原则)。例如,如果您的 p.py 脚本有一行 print(X.i) 形式的行,这是一个明显的 AttributeError,而不是检查最好将其包装在 try- except 中:

try:
print(X.i)
except AttributeError:
print("X has no attribute i")

关于python - 检查参数 TypeError 而不执行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34782710/

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