news 2026/8/8 1:55:04

解决TypeError: unsupported operand type(s) for |: ‘type‘ and ‘type‘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
解决TypeError: unsupported operand type(s) for |: ‘type‘ and ‘type‘

这个错误是因为在Python 3.9及以下版本中,类型注解不支持使用"|"来联合类型。在Python 3.10及以上版本中才支持这种写法。

解决方案有两种:

  1. 升级Python到3.10或以上版本。(可能会涉及该一系列的依赖,可能要重新配置环境)

  2. 修改DINOv2的源代码,将类型注解中的"|"改为使用"Optional"或"Union"。

成功解决,但有一堆,提供一个专门的修复脚本来批量修复这些问题

# fix_dinov2_type_hints.py import os import re def fix_type_hints_in_file(file_path): """修复单个文件中的类型注解语法""" with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 备份原始内容 original_content = content # 修复所有 "type | None" 语法 content = re.sub(r'\bfloat\s*\|\s*None\b', 'Optional[float]', content) content = re.sub(r'\bint\s*\|\s*None\b', 'Optional[int]', content) content = re.sub(r'\bbool\s*\|\s*None\b', 'Optional[bool]', content) content = re.sub(r'\bstr\s*\|\s*None\b', 'Optional[str]', content) content = re.sub(r'\btorch\.Tensor\s*\|\s*None\b', 'Optional[torch.Tensor]', content) # 修复其他可能的类型联合语法(针对Python 3.10+) content = re.sub(r'\bfloat\s*\|\s*int\b', 'Union[float, int]', content) content = re.sub(r'\bint\s*\|\s*float\b', 'Union[int, float]', content) # 检查是否需要添加导入 if 'Optional' in content and 'from typing import Optional' not in content: # 在文件顶部添加导入 lines = content.split('\n') for i, line in enumerate(lines): if line.startswith('import ') or line.startswith('from ') or line.strip() == '': continue else: # 在第一个非导入/空行前插入 lines.insert(i, 'from typing import Optional, Union') break content = '\n'.join(lines) # 如果内容有变化,保存文件 if content != original_content: with open(file_path, 'w', encoding='utf-8') as f: f.write(content) print(f"已修复: {file_path}") return True return False def find_and_fix_dinov2_files(): """查找并修复DINOv2的所有Python文件""" import torch.hub hub_dir = torch.hub.get_dir() dinov2_path = os.path.join(hub_dir, 'facebookresearch_dinov2_main') if not os.path.exists(dinov2_path): print(f"未找到DINOv2路径: {dinov2_path}") return print(f"正在修复DINOv2文件在: {dinov2_path}") # 修复所有.py文件 for root, dirs, files in os.walk(dinov2_path): for file in files: if file.endswith('.py'): file_path = os.path.join(root, file) fix_type_hints_in_file(file_path) print("修复完成!") if __name__ == "__main__": find_and_fix_dinov2_files()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/2 2:25:29

Qwen2.5企业级API搭建:云端GPU弹性伸缩,成本可控

Qwen2.5企业级API搭建:云端GPU弹性伸缩,成本可控 引言:为什么企业需要云端大模型API? 作为技术主管,你可能正在面临这样的困境:公司业务需要接入大语言模型能力,但自建服务器不仅前期投入大&a…

作者头像 李华
网站建设 2026/8/6 13:12:10

Qwen2.5-VL多模态入门:图片分析免配置,1小时1块体验

Qwen2.5-VL多模态入门:图片分析免配置,1小时1块体验 引言:当自媒体遇上AI图片分析 作为一名自媒体博主,你是否经常遇到这样的困扰:拍摄了大量视频素材,却需要花费数小时手动截图、标注关键帧、总结内容要…

作者头像 李华
网站建设 2026/7/31 9:16:53

BUCK-BOOST vs 传统方案:3倍效率提升的实测对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个效率对比测试平台,要求:1. 设计输入3-12V转5V/2A的BUCK-BOOST电路;2. 设计相同规格的LDO线性稳压电路;3. 开发自动测试程序…

作者头像 李华
网站建设 2026/8/4 21:33:04

什么是 Agentic RAG?如何构建多 Agent Agentic RAG 系统

检索增强生成 (RAG) 与海量信息库交互,将大型语言模型 (LLM) 的强大功能与聚焦数据检索相结合,提供精准且与上下文相关的响应。RAG 是精准应用的基本组件,它将从知识库中提取数据的检索器与生成连贯答案的生成模型相集成。 然而,随…

作者头像 李华
网站建设 2026/8/4 21:31:20

Python+Vue的爱心捐赠系统 Pycharm django flask

收藏关注不迷路!!需要的小伙伴可以发链接或者截图给我 项目介绍 随着社会经济的发展和文明程度的提升,公益事业逐渐成为了社会进步的重要推动力量。在各类公益活动中,爱心捐赠项目尤为重要,它们致力于为需要帮助的人…

作者头像 李华
网站建设 2026/7/29 23:35:48

AI智能实体侦测服务日志监控:生产环境运维部署手册

AI智能实体侦测服务日志监控:生产环境运维部署手册 1. 引言 1.1 业务场景描述 在现代内容处理与信息提取系统中,非结构化文本的自动化理解已成为关键能力。新闻聚合、舆情分析、知识图谱构建等场景均依赖于高效准确的命名实体识别(NER&…

作者头像 李华