如何在类方法的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
相关产品推荐
相关产品推荐

