Python中基于DOB计算AGE触发TypeError,求解决方案
问题分析
报错TypeError: an integer is required (got type datetime.datetime)的核心原因:
- 你用
date(v1)尝试转换datetime对象,但date()构造函数需要传入年、月、日三个整数参数,而非直接传入datetime实例。 - 代码里
v1 = 2001-11-24 00:00:00的写法是非法的,实际你获取到的v1是datetime.datetime类型的对象,不需要手动写这个赋值语句。
解决方案
根据你的场景,提供两种修正方式:
方式一:直接使用datetime对象计算
如果v1已经是datetime.datetime类型,直接传入函数即可,函数可兼容datetime和date对象的属性调用:
from datetime import date, datetime # 假设v1是已获取到的datetime对象,示例赋值如下 v1 = datetime(2001, 11, 24, 0, 0, 0) def age(birthdate): today = date.today() age = today.year - birthdate.year - ((today.month, today.day) < (birthdate.month, birthdate.day)) return age print(age(v1), "years")
方式二:将datetime对象转为date对象
如果需要将datetime对象转为date类型,使用datetime对象自带的.date()方法,而非date()构造函数:
from datetime import date, datetime v1 = datetime(2001, 11, 24, 0, 0, 0) def age(birthdate): today = date.today() age = today.year - birthdate.year - ((today.month, today.day) < (birthdate.month, birthdate.day)) return age # 调用datetime对象的date()方法完成转换 print(age(v1.date()), "years")
额外情况处理
如果你的v1是字符串形式的"2001-11-24 00:00:00",需要先解析为datetime对象:
from datetime import date, datetime v1_str = "2001-11-24 00:00:00" # 按字符串格式解析为datetime对象 v1 = datetime.strptime(v1_str, "%Y-%m-%d %H:%M:%S") def age(birthdate): today = date.today() age = today.year - birthdate.year - ((today.month, today.day) < (birthdate.month, birthdate.day)) return age print(age(v1), "years")
内容的提问来源于stack exchange,提问作者Amol Shedge
相关产品推荐
相关产品推荐

