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
相关产品推荐
相关产品推荐

