使用Python 3.5调用Todoist REST API时遭遇datetime KeyError问题
解决Todoist API获取数据时的datetime KeyError问题
我帮你搞定这个问题!从你给出的示例数据来看,出现KeyError: 'datetime'的核心原因很明确:不是所有任务的due字段里都包含datetime键,甚至有些任务可能根本没有due字段(比如没设置截止时间的任务)。当你直接通过task['due']['datetime']访问时,只要其中一个键不存在,就会触发KeyError。
下面给你几个实用的解决方案,按场景选择就行:
1. 最推荐:使用字典的get()方法(安全且简洁)
get()方法是处理字典键不存在的标准做法,它不会抛出错误,而是返回你指定的默认值(默认是None)。同时别忘了先检查due字段是否存在:
for task in todoist_data: # 先获取due信息,没有的话返回None due_details = task.get('due') # 再从due里拿datetime,没有就返回None task_datetime = due_details.get('datetime', None) if due_details else None # 这里写你后续的处理逻辑,比如打印或存储task_datetime print(f"Task {task['id']} datetime: {task_datetime}")
2. 捕获KeyError异常(适合需要错误日志的场景)
如果需要对缺失datetime的情况做特殊处理(比如记录日志),可以用try-except块:
for task in todoist_data: try: task_datetime = task['due']['datetime'] except KeyError: # 自定义处理逻辑,比如设默认值+打印提示 task_datetime = None print(f"Warning: Task {task['id']} has no datetime in due field") # 后续处理
3. 提前检查键是否存在(直观易懂)
如果你更倾向于显式的条件判断,也可以直接检查due和datetime是否在对应的字典里:
for task in todoist_data: if 'due' in task and 'datetime' in task['due']: task_datetime = task['due']['datetime'] else: task_datetime = None # 后续处理
另外补充个小提醒:Todoist API返回的due字段里,有时候即使有截止日期,也可能只有date而没有datetime(比如只设置了日期没设具体时间),所以这些方案也能覆盖这种情况哦。
内容的提问来源于stack exchange,提问作者Normalitie
相关产品推荐
相关产品推荐

