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

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()

这个版本的优势在于:

  1. 不管日/月是一位还是两位数字,转成整数后都能正确识别;
  2. datetime(year, month, day)会自动验证日期的合法性(比如13月、32日这种无效日期都会抛出ValueError),比单纯用strptime更可靠。

内容的提问来源于stack exchange,提问作者Jaakko Seppälä

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:04:38