You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 2与Python 3执行同段代码报错不同的原因及代码问题解析

Python版本差异导致FizzBuzz代码报错位置不同的原因解析

一、不同Python版本报错位置不同的原因

  • Python 2 不支持函数类型注解语法:代码第8行的def fizz_buzz(n: int) -> str:使用了Python 3.5+才引入的类型注解(参数和返回值类型标注),Python 2的解释器无法识别这种语法,在解析到这一行时直接抛出语法错误,不会继续处理后续代码,因此报错位置停在第8行。
  • Python 3 支持类型注解语法:解释器可以正常解析第8行的函数定义,继续向下执行代码,直到遇到第13行的while循环语法错误才抛出异常,因此报错位置在第13行。

二、代码无法运行的原因解析

你的推测是正确的,代码无法运行的核心问题确实和n的赋值/引用使用冒号:有关,具体细节如下:

  1. while循环的语法错误:
    代码中while (n: sys.stdin.readline())是完全错误的语法,Python中赋值操作使用等号=,而非冒号:。如果要在while循环条件里完成赋值,Python 3.8及以上版本可以使用海象运算符:=,正确写法应为:

    while (n := sys.stdin.readline()):
    

    若使用Python 3.8以下版本,需要拆分赋值和循环判断:

    n = sys.stdin.readline()
    while n:
        print(fizz_buzz(int(n)))
        n = sys.stdin.readline()
    
  2. Python 2额外的兼容性问题:
    即使修复了while循环的语法错误,Python 2仍然无法运行这段代码,因为它不支持函数类型注解。要在Python 2中运行,需要去掉函数定义中的类型标注,修改为:

    def fizz_buzz(n):
        return CYCLE_OF_15[n % 15] or str(n)
    

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:35:29