启动FiftyOne应用时遭遇GraphQL API错误:Unhashable type: 'StrawberryAnnotation'
启动FiftyOne应用时遇到dacite可选类型处理错误的解决办法
错误信息
File "c:\Users\aidan\AppData\Local\Programs\Python\Python311\Lib\site-packages\graphql\execution\execute.py", line 1036, in await_result return build_response(await result, errors) # type: ignore ^^^^^^^^^^^^ File "c:\Users\aidan\AppData\Local\Programs\Python\Python311\Lib\site-packages\graphql\execution\execute.py", line 451, in get_results await gather(*(results[field] for field in awaitable_fields)), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "c:\Users\aidan\AppData\Local\Programs\Python\Python311\Lib\site-packages\graphql\execution\execute.py", line 535, in await_result self.handle_field_error(error, return_type) File "c:\Users\aidan\AppData\Local\Programs\Python\Python311\Lib\site-packages\graphql\execution\execute.py", line 569, in handle_field_error raise error File "c:\Users\aidan\AppData\Local\Programs\Python\Python311\Lib\site-packages\graphql\execution\execute.py", line 528, in await_result return_type, field_nodes, info, path, await result ^^^^^^^^^^^^ File "c:\Users\aidan\AppData\Local\Programs\Python\Python311\Lib\site-packages\strawberry\schema\schema_converter.py", line 513, in _async_resolver return await await_maybe(_get_result(_source, strawberry_info, **kwargs)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "c:\Users\aidan\AppData\Local\Programs\Python\Python311\Lib\site-packages\strawberry\utils\await_maybe.py", line 12, in await_maybe return await value ^^^^^^^^^^^ File "c:\Users\aidan\AppData\Local\Programs\Python\Python311\Lib\site-packages\fiftyone\server\paginator.py", line 107, in paginate return await get_items( ^^^^^^^^^^^^^^^^ File "c:\Users\aidan\AppData\Local\Programs\Python\Python311\Lib\site-packages\fiftyone\server\paginator.py", line 75, in get_items edges.append(Edge(node=from_db(doc), cursor=str(_id))) ^^^^^^^^^^^^ File "c:\Users\aidan\AppData\Local\Programs\Python\Python311\Lib\site-packages\fiftyone\server\paginator.py", line 105, in from_db return from_dict(cls, doc) ^^^^^^^^^^^^^^^^^^^ File "c:\Users\aidan\AppData\Local\Programs\Python\Python311\Lib\site-packages\fiftyone\server\utils.py", line 108, in from_dict return _from_dict(data_class, data, config=_dacite_config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "c:\Users\aidan\AppData\Local\Programs\Python\Python311\Lib\site-packages\dacite\core.py", line 72, in from_dict value = get_default_value_for_field(field, field_type) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "c:\Users\aidan\AppData\Local\Programs\Python\Python311\Lib\site-packages\dacite\dataclasses.py", line 19, in get_default_value_for_field elif is_optional(type_): ^^^^^^^^^^^^^^^^^^
解决步骤
对齐依赖版本
该错误多由依赖包版本冲突导致,尤其是dacite和FiftyOne的版本不兼容:- 卸载现有冲突包:
pip uninstall -y fiftyone dacite strawberry-graphql graphql-core - 重新安装稳定兼容版本:
若问题仍存在,指定dacite的兼容版本:pip install fiftyonepip install dacite==1.8.1
- 卸载现有冲突包:
清理FiftyOne缓存与损坏元数据
数据集元数据或本地缓存损坏可能触发加载错误:- 关闭所有FiftyOne进程,删除本地缓存目录(Windows命令):
rmdir /s /q C:\Users\aidan\AppData\Local\fiftyone - 重新导入数据集:
import fiftyone as fo # 删除现有损坏数据集 fo.delete_dataset("你的数据集名称") # 重新从目录导入(根据数据集类型调整参数) dataset = fo.Dataset.from_dir( dataset_dir="你的数据集路径", dataset_type=fo.types.COCODetectionDataset ) dataset.save()
- 关闭所有FiftyOne进程,删除本地缓存目录(Windows命令):
验证Python版本兼容性
确认使用的Python3.11与FiftyOne版本兼容:FiftyOne从v0.17.0开始支持Python3.11,若你的FiftyOne版本低于此,升级至最新稳定版即可。检查数据集完整性
确认数据集的图像文件、标注文件无损坏或缺失,可尝试用一个小型测试数据集启动FiftyOne,排查是否是原数据集本身的问题。
内容的提问来源于stack exchange,提问作者aidan808
相关产品推荐
相关产品推荐

