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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:56:24