Python tkinter开发中time.strptime转时间类型校验失败问题
问题原因
两个核心错误导致类型判断始终失败:
- 类型判断的参照值写错:
if type(alarm_time) is time:语句里的time是你导入的time模块对象,不是任何时间数据类型,没有任何入参的类型会等于模块对象,该判断天生不可能成立。 - 对API返回值类型认知错误:
time.strptime()解析字符串后返回的是time.struct_time类型的结构化时间元组,本身也和你写的判断类型不匹配。
补充说明:Python标准库time模块本身没有定义独立的“纯时间类型”,如果你需要只存储时分秒的时间对象,应该使用datetime模块下的time类。
解决方法
根据存储需求二选一即可:
方案1:直接使用struct_time存储闹钟时间
不需要修改输入解析逻辑,只需要修正setAlarm方法里的类型判断即可,推荐用isinstance做类型检查,兼容性比直接比对type结果更好:
import time class Alarm: # 其他类方法省略 def setAlarm(self, alarm_time): if isinstance(alarm_time, time.struct_time): self.alarm_time = alarm_time print('It\'s a time!') else: print('It\'s not a time!')
原有调用代码不需要改动,修改后就能正常进入赋值分支。
方案2:使用datetime.time类型存储纯时间值
如果你需要更轻量的、只包含时分秒的时间对象(不需要struct_time里带的年、月、日、周几等冗余字段),可以切换到datetime模块的time类,同时修改解析逻辑和类型判断:
首先修改输入解析部分的代码:
from datetime import datetime # 省略部分代码 # 解析Entry输入的时分字符串,转成datetime.time对象 alarm_time_obj = datetime.strptime(e.get(), "%H:%M").time() a.setAlarm(alarm_time_obj) e.delete(0, END) print(a.getAlarmTime())
对应修改setAlarm方法的类型判断,注意导入时区分time模块和datetime.time类,避免命名空间冲突:
from datetime import time class Alarm: # 其他类方法省略 def setAlarm(self, alarm_time): if isinstance(alarm_time, time): self.alarm_time = alarm_time print('It\'s a time!') else: print('It\'s not a time!')
内容的提问来源于stack exchange,提问作者grantiod
相关产品推荐
相关产品推荐

