解决datetime模块circular import报错及年龄计算代码改写为类的问题
问题解决
1. AttributeError报错修复
AttributeError: partially initialized module 'datetime' has no attribute 'today' (most likely due to a circular import)
这个报错的直接原因是你的工作目录下存在和Python标准库重名的datetime.py文件,导入模块时系统会优先加载本地的同名文件,而非标准库,最终触发循环导入、属性缺失问题。
修复步骤:
- 将本地命名为
datetime.py的文件改为其他名称(如age_calc.py) - 删除同目录下自动生成的
datetime.pyc缓存文件 - 重新运行代码即可正常导入标准库datetime模块
2. 类形式改写的年龄计算代码
改写后的代码完全保留原有逻辑,同时符合类封装规范:
import datetime class AgeCalculator: def __init__(self): # 获取当前年份 self.current_year = datetime.datetime.today().year def validate_date(self, date_parts): # 验证月份、日期合法性(保留原代码逻辑) month = int(date_parts[1]) day = int(date_parts[2]) if month > 12 or day > 31: return False return True def calc_age(self, birth_year): return self.current_year - int(birth_year) def run(self): # 接收输入并执行计算流程 input_date = input().split('/') if not self.validate_date(input_date): print('WRONG') return age = self.calc_age(input_date[0]) print(age) if __name__ == "__main__": calculator = AgeCalculator() calculator.run()
可选优化说明
原有日期验证逻辑仅做了最大值校验,未兼容不同月份天数、闰年等特殊情况,可根据需求使用datetime.strptime方法做更严谨的日期合法性校验。
内容的提问来源于stack exchange,提问作者Hm tk
相关产品推荐
相关产品推荐

