Python运行时忽略类型提示为何仍抛出TypeError?
Python类型注解相关困惑
Python运行时不强制执行函数和变量类型注解,这些注解可被类型检查器、IDE、代码检查工具等第三方工具使用。
但为何运行以下代码时会出现类型相关报错?
def odd(n: int) -> bool: return n % 2 != 0 def main(): print(odd("Hello, world!")) if __name__ == "__main__": main()
运行报错信息:
C:\laragon\www\python>python type-hints.py Traceback (most recent call last): File "C:\laragon\www\python\type-hints.py", line 10, in <module> main() File "C:\laragon\www\python\type-hints.py", line 6, in main print(odd("Hello, world!")) File "C:\laragon\www\python\type-hints.py", line 2, in odd return n % 2 != 0 TypeError: not all arguments converted during string formatting
请问‘Python忽略类型提示’具体指什么?
解答
你遇到的报错和“Python忽略类型提示”完全是两回事。
“Python忽略类型提示”的核心意思是:Python解释器在运行代码时,完全不会因为你写了类型注解,就去检查传入的参数类型是否符合注解要求。比如你给odd函数的参数n标注了int,但Python不会阻止你传入字符串,也不会自动把字符串转成整数——它会直接把字符串原封不动传进函数里执行。
那你代码里的报错是怎么来的?是因为函数内部执行n % 2时,字符串和整数做%运算,Python会把这个操作当成字符串格式化(比如"name: %s" % "Alice"这种用法),但"Hello, world!" % 2不符合字符串格式化的语法规则,所以才抛出TypeError。这是代码逻辑本身的错误,和Python是否强制执行类型注解没有关系。
总结两点:
- 类型注解只是给第三方工具看的(比如IDE、mypy类型检查器),Python运行时根本不会管你传的参数类型对不对;
- 你代码的报错是字符串与整数的
%运算不合法导致的,和类型注解的“强制执行”无关。
内容的提问来源于stack exchange,提问作者user19551894
相关产品推荐
相关产品推荐

