使用
for sig in inspect.signature.parameters.items():
if isinstance(sig[1].annotation, inspect._empty):
print("empty")
时,我从来没有让控制台说打印“空”。即使在 if 子句之前使用
print(sig[1].annotation)
时给出的输出是:
<class 'inspect._empty'>
我也尝试过使用这样的字符串比较:
if sig[1].annotation == "<class 'inspect._empty'>":
print("empty")
这里的问题出在哪里?
你几乎答对了!问题在于你试图将一个类型(
inspect._empty
)与它的字符串表示形式进行比较。
以下是修复方法:
你不应该将
sig[1].annotation
与字符串 "
<class 'inspect._empty'>
" 进行比较,而应该检查它是否是
inspect._empty
类型
。
以下是更新后的代码:
import inspect
def my_function(a: int, b, c: str = "default"):
pass
for name, param in inspect.signature(my_function).parameters.items():
if param.annotation is inspect._empty:
print(f"参数 '{name}' 没有类型注释。")
在此代码中:
-
我们使用
is
运算符来检查param.annotation
是否与inspect._empty
是 同一个 对象。 - 我们遍历函数签名的参数并打印出那些没有类型提示的参数。
这种方法提供了更可靠和 Pythonic 的方式来检查空的类型注释。
标签:python,python-typing From: 62010367