Python日期格式验证及AttributeError问题排查修复
问题2:你的代码报错AttributeError的原因及修复方法?
报错原因
你代码里的AttributeError是因为一个小疏忽:你调用了字符串对象的strptime方法,但strptime是datetime类的方法,不是字符串的方法!
看你的代码片段:
valid_date = date.strptime(date, '%d.%m.%Y')
这里的date是input()获取的字符串,字符串根本没有strptime这个方法,所以Python会抛出AttributeError。
修复方法
首先把date.strptime改成datetime.strptime。另外,你的需求是兼容05.04.2018和5.4.2018两种格式,但%d和%m默认要求两位数字(带前导零),直接用%d.%m.%Y解析5.4.2018会报错。我给你写个更灵活的版本,能同时支持两种输入格式:
# -*- coding: UTF-8 -*- #!/usr/bin/python from datetime import datetime def validate_date(): try: date_input = input("请输入DD.MM.YYYY或D.M.YYYY格式的日期:") # 分割日、月、年字符串 day_str, month_str, year_str = date_input.split('.') # 转换为整数(自动处理一位/两位数字) day = int(day_str) month = int(month_str) year = int(year_str) # 验证并创建日期对象——自动检查日期合法性(比如2月30日会报错) valid_date = datetime(year, month, day) print(f"日期有效!格式化后:{valid_date.strftime('%d.%m.%Y')}") return valid_date except ValueError as e: print(f"错误:请输入合法的日期格式(如05.04.2018或5.4.2018)。详情:{str(e)}") # 运行测试 validate_date()
这个版本的优势在于:
- 不管日/月是一位还是两位数字,转成整数后都能正确识别;
datetime(year, month, day)会自动验证日期的合法性(比如13月、32日这种无效日期都会抛出ValueError),比单纯用strptime更可靠。
内容的提问来源于stack exchange,提问作者Jaakko Seppälä
相关产品推荐
相关产品推荐

