Python错误集锦:sqlite3建表时提示:sqlite3.OperationalError: table table_juzicode already exists——用TaoToken统一Ke
1. 为什么你的 sqlite3 建表脚本第二次跑就炸了如果你写过 Python 操作 SQLite 的小工具大概率见过这个报错sqlite3.OperationalError: table table_juzicode already exists。它不是什么玄学问题本质就一句话——你让 SQLite 去建一张已经存在的表而 SQLite 默认不允许同名表重复创建。SQLite 的CREATE TABLE语句在语义上是「创建一张新表」不是「确保这张表存在」所以只要目标数据库文件里已经有同名表它就直接抛OperationalError。这个报错最坑的地方在于第一次运行脚本一切正常表建好了、数据也写进去了你心满意足地关掉终端。第二天再跑同一个脚本啪红了。很多新手会以为是代码写错了反复检查 SQL 语法其实语法完全没问题问题出在「执行时机」和「数据库状态」上。我把它拆成三个最常见的触发场景你可以对照自己的代码看看属于哪一种场景一脚本重复执行建表语句没有幂等保护。这是最典型的。你的脚本里写死了CREATE TABLE table_juzicode (...)第一次跑创建成功第二次跑表还在于是报错。这类脚本常见于数据采集、定时任务、本地缓存初始化等场景。场景二连接复用导致同一进程内重复建表。比如你在一个函数里建表这个函数被循环调用了多次或者你在while循环里每次都connect一次然后建表。SQLite 对同一个数据库文件的连接是共享文件状态的第一次建完第二次自然就冲突。场景三数据库文件残留。你之前调试时生成过test.db里面已经有table_juzicode这张表后来你改了代码逻辑但没删旧文件新脚本一跑就撞上历史遗留的表。这种情况在多人协作或者换电脑迁移项目时特别常见。这三种场景的根因是同一个建表动作没有做「存在性判断」。SQLite 提供了两种标准解法一种是在 SQL 层面用IF NOT EXISTS一种是在 Python 层面先查sqlite_master再决定建不建。下面我会把两种都给你并且演示怎么用 TaoToken 统一 Key 调模型来帮你分析这类报错日志把排查过程也自动化掉。先明确一下本文适合谁正在用 Python sqlite3 做本地数据存储的开发者、写自动化脚本时被重复建表卡住的同学、以及想把「报错分析」这一步也接进 AI 工作流的人。你不需要很深的数据库背景跟着改几行代码就能彻底消除这个异常。2. 用 TaoToken 统一 Key 接入模型辅助分析 sqlite3 报错日志在动手改代码之前先说清楚为什么这里要引入 TaoToken。你遇到的OperationalError往往不是孤立的它可能夹在一大段 traceback 里前面还有连接信息、SQL 语句、行号。人工看当然能看懂但如果你想把「贴报错 → 得到修复建议」做成一个可复用的小工具或者你同时在用 Claude Code、Cline 这类编码助手就需要一个统一的 API 通道来调模型。TaoToken 在这里扮演的角色是统一的模型调用入口你申请一个 Key配好 Base URL就能用同一套凭证去调不同的模型不用为每个模型单独维护一套鉴权和地址。对于「分析 Python 报错日志」这种任务你完全可以把 traceback 原文丢给模型让它告诉你冲突来源和改法。具体怎么拿到 Key、怎么配我按最小步骤走一遍第一步打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册并登录。登录后进入控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 。第二步在控制台里找到 API Keys 页面创建一个新的 Key。这个页面地址是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。创建后把 Key 复制出来注意它只显示一次丢了就得重建。第三步记住你的 API Base URLhttps://taotoken.net/api。注意这个地址后面不加任何 UTM 参数就是纯粹的 API 入口。所有兼容 OpenAI 协议的客户端把 base_url 指向它、把 api_key 填成你刚创建的 Key就能发请求。如果你只是想先验证一下模型能不能正常对话可以直接用模型对话页面https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。在里面选一个模型把报错日志粘进去问它「这个 sqlite3.OperationalError 怎么修」它会给你分析。如果你是要长期做编码、跑 Agent 任务那更适合用 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。它面向的就是持续性的代码生成和调试场景比单次对话更划算。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有各语言的调用示例。如果你用的是 Claude Code 这类工具对应的接入说明在 https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecode-anthropicutm_campaignrewrite 。这里要强调一点TaoToken 是正规的模型 API 聚合入口不是让你去搞什么网络绕行。你只需要在代码或工具里把 base_url 和 api_key 配对就能正常调用。下面第三节我会给出可直接复制的配置片段。3. 可复制配置CREATE TABLE IF NOT EXISTS 改写与连接管理这一节是全文的核心我给你三份可以直接抄的代码一份是 SQL 层面的幂等建表一份是 Python 层面的存在性检查一份是 TaoToken 的调用配置。三份配合起来重复建表异常基本就绝迹了。3.1 SQL 层面CREATE TABLE IF NOT EXISTS最省事的改法就是在CREATE TABLE后面加上IF NOT EXISTS。SQLite 原生支持这个语法表存在时它什么都不做不报错。import sqlite3 db_name test.db table_name table_juzicode conn sqlite3.connect(db_name) cursor conn.cursor() sql f CREATE TABLE IF NOT EXISTS {table_name} ( _id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, price FLOAT, weight FLOAT ) cursor.execute(sql) conn.commit() conn.close() print(f{table_name} 已确保存在)注意几个细节第一表名我用 f-string 拼进去了实际项目里如果表名来自外部输入一定要做白名单校验别直接拼防止 SQL 注入。第二conn.commit()不能省DDL 语句在 SQLite 里也需要提交。第三conn.close()要成对出现避免连接泄漏。这段代码你跑第一次会建表跑第二次、第三次都不会报错因为IF NOT EXISTS把冲突吞掉了。这是最推荐的写法简洁且幂等。3.2 Python 层面先查 sqlite_master 再建表如果你需要更精细的控制比如表存在时想打印日志、想检查表结构是否匹配那就用查询sqlite_master的方式。sqlite_master是 SQLite 的系统表记录了所有表、索引、视图的元信息。import sqlite3 db_name test.db table_name table_juzicode conn sqlite3.connect(db_name) cursor conn.cursor() # 查询当前数据库里所有表名 cursor.execute(SELECT name FROM sqlite_master WHERE typetable) existing_tables [row[0] for row in cursor.fetchall()] if table_name not in existing_tables: sql f CREATE TABLE {table_name} ( _id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, price FLOAT, weight FLOAT ) cursor.execute(sql) conn.commit() print(f{table_name} 创建成功) else: print(f{table_name} 已经存在跳过建表) conn.close()这段代码的好处是逻辑透明你能清楚看到「判断 → 建表」的流程。缺点是比IF NOT EXISTS多一次查询性能差异在本地小库上可以忽略。3.3 TaoToken 调用配置片段下面这份是给「把报错日志丢给模型分析」用的配置。以 OpenAI 兼容的 Python SDK 为例from openai import OpenAI client OpenAI( base_urlhttps://taotoken.net/api, api_key你的_TaoToken_Key ) def analyze_error(traceback_text: str) - str: resp client.chat.completions.create( modelclaude-sonnet-4-20250514, messages[ {role: system, content: 你是 Python 调试助手请分析报错原因并给出最小修复代码。}, {role: user, content: traceback_text} ] ) return resp.choices[0].message.content if __name__ __main__: err OperationalError: table table_juzicode already exists print(analyze_error(err))如果你用的是 Claude Code配置通常写在 settings 里核心三件套是{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的_TaoToken_Key, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }如果你用的是 Cline 或类似的 MCP 客户端配置里同样要写全三件套Base URL 填https://taotoken.net/apiAPI Key 填你的 KeyModel ID 填你要用的模型名。这三者缺一不可少一个就会报鉴权失败或模型不存在。这里提醒一句Model ID 要写你实际可用的模型名不同模型名字不一样别照抄。你可以在模型对话页面里看到当前可选的模型列表。4. 验证请求跑通建表与模型分析两条链路配置写完了得验证它真的能用。我分两条链路来验一条是 sqlite3 建表链路一条是 TaoToken 模型调用链路。4.1 验证建表幂等性把 3.1 的代码存成init_db.py然后连续跑三次python init_db.py python init_db.py python init_db.py预期结果是三次都输出table_juzicode 已确保存在没有任何 traceback。如果你看到第三次仍然报OperationalError那说明你的代码里还有别的地方在裸执行CREATE TABLE去全局搜一下CREATE TABLE关键字把没加IF NOT EXISTS的都补上。再验证一下表结构确实建对了import sqlite3 conn sqlite3.connect(test.db) cursor conn.cursor() cursor.execute(PRAGMA table_info(table_juzicode)) for col in cursor.fetchall(): print(col) conn.close()输出应该包含_id、name、price、weight四列_id是主键且自增。如果列名对不上说明你之前残留的旧表结构和现在代码不一致需要先DROP TABLE再重建。4.2 验证 TaoToken 模型调用把 3.3 的代码存成analyze.py把 Key 换成你自己的然后运行python analyze.py如果一切正常你会看到模型返回一段中文分析告诉你table already exists是因为重复建表并给出IF NOT EXISTS的修复建议。如果报错常见的是401鉴权失败说明 Key 填错了或者没生效也可能是model not found说明 Model ID 写错了。你也可以直接用 curl 验证 API 通道是否通curl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer 你的_TaoToken_Key \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: ping}] }返回里有choices字段就说明通道正常。这一步能帮你快速区分「是 Key 的问题」还是「是代码的问题」。4.3 把两条链路串起来真正实用的做法是在你的建表脚本里加一个异常捕获一旦捕获到OperationalError就自动把 traceback 发给模型分析把建议打印出来import sqlite3 from openai import OpenAI client OpenAI(base_urlhttps://taotoken.net/api, api_key你的_TaoToken_Key) def safe_create_table(db_name, table_name): conn sqlite3.connect(db_name) cursor conn.cursor() sql f CREATE TABLE IF NOT EXISTS {table_name} ( _id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, price FLOAT, weight FLOAT ) try: cursor.execute(sql) conn.commit() print(f{table_name} 已确保存在) except sqlite3.OperationalError as e: print(f建表异常{e}) resp client.chat.completions.create( modelclaude-sonnet-4-20250514, messages[{role: user, content: fSQLite 报错{e}请给出修复建议}] ) print(resp.choices[0].message.content) finally: conn.close() safe_create_table(test.db, table_juzicode)这样即使你哪天又写出裸建表语句脚本也能自己把问题诊断出来而不是让你对着红色 traceback 发呆。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth这一节我把接入 TaoToken 和跑 sqlite3 时最容易撞上的几个报错列出来对照着修。报错一401 Unauthorized。这是鉴权失败九成是 Key 的问题。检查三处Key 有没有复制完整前后别带空格、请求头里是不是Authorization: Bearer 你的Key、Key 有没有被你在控制台里删掉。如果你用的是 Claude Code检查ANTHROPIC_API_KEY有没有写对如果用 Cline检查 API Key 字段。还有一种情况是你把 Key 写进了代码但没重新运行改完记得重启进程。报错二local proxy failed 或 connection refused。这个通常出现在你本地配了某个代理工具但代理没启动或者端口不对。TaoToken 的 API 地址是https://taotoken.net/api直连即可不需要额外代理。如果你环境变量里残留了HTTP_PROXY、HTTPS_PROXY先临时清掉再试unset HTTP_PROXY unset HTTPS_PROXY然后重新跑你的请求。如果清了就通说明是代理配置干扰。报错三reading choices 或 KeyError: choices。这个报错说明你拿到的响应里没有choices字段通常是响应体是一个错误对象比如{error: {message: ...}}。常见原因是 Model ID 写错了或者请求体格式不对。先把响应原文打印出来看resp client.chat.completions.create(...) print(resp)看清楚错误信息再改。如果是模型名不对去模型对话页面确认可用模型列表。报错四OAuth 相关报错。如果你用的是 Claude Code 这类工具它可能默认走 OAuth 登录流程。当你改用 API Key 接入时要确保配置里走的是 Key 而不是 OAuth。检查 settings 里ANTHROPIC_API_KEY是否生效必要时把 OAuth 相关的缓存清掉重新登录。核心还是那三件套Base URL、Key、Model ID三者对齐就不会出 OAuth 问题。报错五sqlite3.OperationalError: table xxx already exists 反复出现。如果你已经加了IF NOT EXISTS还在报检查是不是有多个连接同时在建表或者你的建表语句在事务里被回滚后又重试。还有一种可能是你连的数据库文件不是你以为的那个比如相对路径test.db在不同工作目录下指向了不同文件。用绝对路径能避免这类混乱import os db_path os.path.abspath(test.db) conn sqlite3.connect(db_path)排查这类问题的通用思路是先确认数据库文件路径再确认表是否真的存在最后确认建表语句有没有幂等保护。三步走完基本没有漏网的。6. 把统一 Key 通道接进你的日常调试流写到这里重复建表这个具体问题其实已经解决了IF NOT EXISTS或先查sqlite_master二选一即可。但我想多说一层——报错本身不可怕可怕的是每次都要人工去猜。你完全可以把「贴报错 → 拿建议」这一步固化下来变成一个随手可用的小工具。我的做法是本地留一个debug_helper.py里面封装好 TaoToken 的调用任何 Python 报错我复制 traceback 进去它返回修复建议和最小复现代码。这样无论是 sqlite3 的OperationalError还是别的库的奇怪异常我都能在几十秒内拿到方向而不是去搜索引擎里翻半天。如果你也想这么干建议从这几步开始先去 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 建一个 Key然后照着 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里的示例把调用跑通最后把本文 4.3 的safe_create_table抄进你的项目。跑通之后你会发现很多以前要折腾半小时的报错现在几分钟就能定位。如果你更偏向长期做编码和 Agent 任务直接上 Coding Plan 会更顺https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。它面向的就是持续性的代码生成和调试比单次对话更适合日常开发节奏。最后留一个我踩过的坑别在循环里反复connect和closeSQLite 的连接开销虽然不大但频繁开关容易在并发场景下出问题。更好的做法是一个进程内复用一个连接或者用连接池。建表这种一次性动作放在程序启动时执行一次就够了没必要每次写数据前都建一遍。把建表和写数据解耦你的脚本会稳很多。

相关新闻

DeepSeek实战:PSCAD Operators说明书翻译与反时限保护模型搭建

DeepSeek实战:PSCAD Operators说明书翻译与反时限保护模型搭建

1. 为什么盯上PSCAD的Operators说明书1.1 PSCAD里Operators到底是什么前阵子搭一套PSCAD反时限过流保护模型,翻着元件库里的Operators分类查说明,越查越觉得绕。很多新手一开始摸PSCAD,注意力都在变压器、断路器、线路这些“大块头”上&#…

2026/10/10 19:59:25 阅读更多 →
YOLOv8狗狗行为检测实战:数据集拆包、双格式转换与训练避坑指南

YOLOv8狗狗行为检测实战:数据集拆包、双格式转换与训练避坑指南

简介:面向狗狗行为识别与目标检测任务,数据集提供1551张原始图片,并同时附带VOC格式的XML标注和YOLO格式的TXT标注,覆盖bark(吠叫)、default(默认)、eat(进食&#xff09…

2026/10/10 19:59:25 阅读更多 →
把5GB语音模型塞进手机:IndexTTS-2.5 的 1.5GB 轻量化部署全流程

把5GB语音模型塞进手机:IndexTTS-2.5 的 1.5GB 轻量化部署全流程

把5GB语音模型塞进手机:IndexTTS-2.5 的 1.5GB 轻量化部署全流程 【免费下载链接】IndexTTS-2.5 项目地址: https://ai.gitcode.com/hf_mirrors/IndexTeam/IndexTTS-2.5 零样本语音克隆、8 维情感向量控制、五语种跨语言音色迁移——这些能力让 IndexTTS-2.…

2026/10/10 19:59:25 阅读更多 →

最新新闻

基于Java的校园二手智能交易平台APP开发全攻略

基于Java的校园二手智能交易平台APP开发全攻略

1. 项目到底在做什么:需求与定位拆解每年毕业设计季,“校园二手交易平台”这类题目都是常青树,但今年我带着学生把“基于Java的校园二手智能交易平台APP”完整做成可运行系统时,发现很多人对这个题目的理解还停留在十年前&#xf…

2026/10/10 20:46:30 阅读更多 →
手机、手表、机器人同跑一个 14MB 模型:Needle 把 AI Agent 端侧化带到了哪一步?

手机、手表、机器人同跑一个 14MB 模型:Needle 把 AI Agent 端侧化带到了哪一步?

手机、手表、机器人同跑一个 14MB 模型:Needle 把 AI Agent 端侧化带到了哪一步? 【免费下载链接】needle Automation foundation model for tiny devices: 2-bit, 8-29 MB, tool calls, ASR, structured extraction and embeddings on phones, wearable…

2026/10/10 20:46:30 阅读更多 →
Spring Boot应用上下文初始化器:启动早期钩子实战

Spring Boot应用上下文初始化器:启动早期钩子实战

最近排查一个Spring Boot应用启动慢和配置加载异常的案例时,我顺手把容器初始化那一段源码完整读了一遍,发现真正用过ApplicationContextInitializer这个扩展点的人其实不多。它藏得比较深,但作用非常大。它本身是Spring Framework时代就有的…

2026/10/10 20:46:30 阅读更多 →
Java3实战:基于Java 3D构建可交互三维场景完整指南

Java3实战:基于Java 3D构建可交互三维场景完整指南

看到java3这个关键词,我的第一反应是Java 3D。Java语言从1.0一路走到现在,版本号里从来没有出现过“Java 3”这种东西,所以java3更像是Java 3D的简写。这篇文章我打算用Java 3D这套老牌3D图形解决方案,做一个小型可交互的3D场景De…

2026/10/10 20:46:30 阅读更多 →
沙箱安全钩子一键放行:vphone-cli 的 MACF ops 表补丁手术全解剖

沙箱安全钩子一键放行:vphone-cli 的 MACF ops 表补丁手术全解剖

沙箱安全钩子一键放行:vphone-cli 的 MACF ops 表补丁手术全解剖 【免费下载链接】vphone-cli 项目地址: https://gitcode.com/GitHub_Trending/vp/vphone-cli 在 Apple Silicon Mac 上跑一台真实 iOS 虚拟机,vphone-cli 依赖两套引擎&#xff1…

2026/10/10 20:46:30 阅读更多 →
网络热词“cua”是如何火起来的?从拟声词到通用表达的语言传播观察

网络热词“cua”是如何火起来的?从拟声词到通用表达的语言传播观察

身边几乎所有人都开始在各种场合吐出"cua"这个音节,我在直播间听到,在游戏群里看到,在短视频评论区刷到,甚至在线下聚会时都能听到有人用"cua"来形容一件干脆利落的小事。这个词看起来只是个拟声词&#xff0…

2026/10/10 20:45:29 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →