You need to enable JavaScript to run this app. Python开发动物园游览程序时跨函数传日期触发AttributeError报错
优惠活动
大模型
产品
解决方案
定价
更多

Python开发动物园游览程序时跨函数传日期触发AttributeError报错

动物园游览查询程序开发报错排查

项目功能目标

  • 实现两个核心交互逻辑:
    • 用户输入计划游览的日期,程序匹配返回当日动物园的开放时段
    • 用户输入抵达、离开的具体时间后,程序结合存储的动物属性字典,筛选出游览时段内处于清醒状态、未进入冬眠周期的可观测动物
  • 现有已完成模块:
    • 封装了Visit类承载游览相关逻辑
    • 实现动物信息文件读取函数
    • 实现冬季月份判断定义函数
    • 动物信息文本文件存储格式为:type_of_animal / hibernation / wake_up_time / sleep_time / feeding_time

遇到的具体问题

在Visit类的opening_hours方法中,尝试使用visit_info函数获取的用户日期输入时,触发报错:

AttributeError: 'str' object has no attribute 'date'

当前卡点:不清楚如何正确将visit_info中获取的日期输入传递给opening_hours方法,打通从用户输入到开放时段匹配、可观测动物筛选的完整流程。

问题根因

报错本质是visit_info函数返回的用户输入是纯字符串类型,代码中却将其当作Python的datetime对象,尝试访问自带的.date属性,自然触发属性不存在的错误。

可落地的修复步骤

  • 第一步:修改visit_info函数,拿到用户输入的日期字符串后先做类型转换
    使用datetime.strptime()把符合标准格式的日期字符串转成datetime对象,这类对象本身自带.date属性,函数最终返回转换后的对象,不要直接返回原始字符串。
    代码参考片段:
    from datetime import datetime
    def visit_info():
        input_date = input("请输入游览日期(格式如2024-10-01):")
        # 按指定格式把字符串转成datetime对象后直接返回
        return datetime.strptime(input_date, "%Y-%m-%d")
    
  • 第二步:调整Visit类中opening_hours方法的入参逻辑
    把转换后的日期对象作为方法参数传入,直接在方法内做月份判断、开放时段匹配,不要在方法内部对传入值做.date的重复取值操作。
    代码参考片段:
    class Visit:
        def opening_hours(self, visit_date):
            # 直接取datetime对象的月份属性判断是否为冬季
            visit_month = visit_date.month
            # 后续匹配对应开放时段的逻辑即可
    
  • 第三步:校准全链路传递逻辑
    实例化Visit类后,直接把visit_info的返回值传入opening_hours方法,不要在传递过程中把日期对象转回字符串,打断类型一致性。

内容的提问来源于stack exchange,提问作者mat3ilda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 12:36:03