gpt4 book ai didi

Python "in"关键字引发 KeyError

转载 作者:行者123 更新时间:2023-12-01 07:02:23 24 4
gpt4 key购买 nike

为了检查TodoistAPI中的 key 是否存在我的类(class)使用“in”关键字。然而,它会导致 KeyError .

我隔离了代码片段,以检查到底是什么导致 KeyError以及提供哪些输入。

api = TodoistAPI(token)
api.sync()
print("id" in api.state["items"][0])

api.state["items"][0]包含:

Item({'assigned_by_uid': None,
'checked': 0,
'child_order': 0,
'collapsed': 0,
'content': 'example task',
'date_added': '0',
'date_completed': None,
'day_order': 0,
'due': {'date': '0',
'is_recurring': True,
'lang': 'de',
'string': 'every day',
'timezone': None},
'has_more_notes': False,
'id': 0,
'in_history': 0,
'is_deleted': 0,
'labels': [0, 0],
'parent_id': None,
'priority': 1,
'project_id': 0,
'responsible_uid': None,
'section_id': None,
'sync_id': None,
'user_id': 0})

我期望输出 print(...)成为TrueFalse ,但实际输出如下

Traceback (most recent call last):
File "/Users/path/to/file.py", line 11, in
print("id" in applicationInterface.state["items"][0])
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/todoist/models.py", line 16, in __getitem__
return self.data[key]
KeyError: 0

Process finished with exit code 1

我还在 Todoist Github 存储库中创建了一个问题:https://github.com/Doist/todoist-python/issues/64

最佳答案

最终,这是 Todoist 中的错误图书馆。

首先,让我们想象一下这样的附加行:

item = api.state["items"][0]
print("id" in item)

这意味着当你写"id" in item时, Python 检查 __contains__类中的方法。 Item定义 __contains__ ,但确实定义了 __getitem__ (通过其基地 Model )。

根据Python语言引用, __getitem__ will be called评估in ,使用回退到序列协议(protocol)

我认为用于评估"id" in item的逻辑相当于这样:

## Implicit logic used to evaluate `"id" in item`
for i in itertools.count():
try:
result = item[i]
except IndexError:
return False

if result is "id" or result == "id":
return True
return False

Model.__getitem__的评价内,会引发 KeyError。从根本上讲,如果 Model是一种映射类型,我认为它应该实现 __contains__以及 __getitem__Python data model说的是:

It is recommended that both mappings and sequences implement the __contains__() method to allow efficient use of the in operator; for mappings, in should search the mapping’s keys

关于Python "in"关键字引发 KeyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58580574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com