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

为何出现AttributeError: 'int'对象无isnumeric属性?如何解决?

错误原因分析
  • 核心触发点:类型不匹配+循环未终止
    当程序校验通过4位数字年份后,会执行year = int(year)将字符串转为整数,但此时代码里写的是valid == True(这是比较操作,不是赋值),valid仍然是False,循环会继续执行。下一次循环时,year已经是整数类型,调用只有字符串才有的isnumeric()方法,自然抛出AttributeError。
  • 其他拖后腿的错误
    • 多处valid == False都是无效的比较,根本改不了valid的状态,循环会一直重复执行。
    • year.decode(year)完全是错误用法:input()返回的本来就是字符串,不需要解码,而且decode()的参数是编码格式,不是字符串本身。
修复方案

针对问题逐一修正:

  1. 修正赋值逻辑:把所有valid == 布尔值改成valid = 布尔值,确保能正确控制循环启停。
  2. 删掉错误的解码代码:直接用input()返回的字符串就行,不需要额外解码。
  3. 调整循环终止时机:在完成闰年判断后,立即把valid设为True,让循环停下来,避免后续对整数类型的year做字符串操作。

修复后的完整代码:

print("Did you know that the last leap year was in 2020?")
print("To find out if a year is a leap year, use this program")
year = input("Please enter a year\n")
valid = False

while not valid:
    if year == "":
        print("Error. Please enter a year - it should be 4 digits long.")
        year = input("Please enter a year\n")
        valid = False
    elif not year.isnumeric():
        print("Error. Please enter a year - it should be 4 digits long.")
        year = input("Please enter a year\n")
        valid = False
    elif len(year) != 4:
        print("Error. Please enter a year - it should be 4 digits long.")
        year = input("Please enter a year\n")
        valid = False
    else:
        year_int = int(year)
        # 采用严谨的闰年判断规则
        if (year_int % 4 == 0 and year_int % 100 != 0) or year_int % 400 == 0:
            print(f"{year_int} is a leap year")
        else:
            print(f"{year_int} is not a leap year, unfortunately")
        valid = True
额外优化提示

原代码的闰年判断只检查了能否被4整除,这是不严谨的。严格的闰年规则是:能被4整除但不能被100整除,或者能被400整除,上面的修复代码已经补上了这个逻辑。

内容的提问来源于stack exchange,提问作者Azalea-Delphinium

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:05:22