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

如何在类方法的if判断中使用isdigit()方法检测输入是否为数字

Python使用isdigit判断月份为数字的报错解决

问题根因

  • 缩进错误:你的类定义下的__init__、myfunc方法没有正确缩进,Python会识别为类外的全局函数,导致实例调用方法时属性逻辑异常,这是最常见的触发原因。
  • 类型不匹配:isdigit()是字符串类型的内置方法,如果你的self.month被赋值为整数类型,调用时会直接抛出AttributeError异常。
  • 特殊字符不识别:如果输入的月份是带负号、小数点的字符串格式,isdigit()会返回False,因为这类符号不属于数字字符。

修正后可运行代码

class myclass():
    # 类内方法必须缩进1个层级
    def __init__(self,year,month,day):
        self.mah = ['none','farvardin','ordibehesht','khordad','tir','mordad','shahrivar','mehr','aban','azar','dey','bahman','esfand']
        self.daylist = list(range(1,32)) # 简化写法替代手动录入1-31
        self.year = year
        self.month = month
        self.day = day
    def myfunc(self):
        # 先判断类型再调用方法,兼容非字符串输入场景
        if isinstance(self.month, str) and self.month.isdigit():
            print(f"输入的月份是数字:{self.month}")
            # 后续自定义逻辑写在这里即可
        else:
            print("输入的月份不是合法数字")

p1= input("Please enter date:")
year,month,day = p1.split('-')
p2 = myclass(year,month,day)
p2.myfunc()

额外优化建议

  • 如果需要兼容整数类型的month输入,可以先转成字符串再判断:if str(self.month).isdigit()
  • 可以增加月份范围校验,转成整数后判断是否在1-12的区间内,避免输入13这类无效数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:06:06