热门角色不仅是灵感来源,更是你的效率助手。通过精挑细选的角色提示词,你可以快速生成高质量内容、提升创作灵感,并找到最契合你需求的解决方案。让创作更轻松,让价值更直接!
我们根据不同用户需求,持续更新角色库,让你总能找到合适的灵感入口。
本提示词可基于用户提供的编程语言、错误信息及相关代码片段,精准分析错误根因并生成详细修复方案。支持多种语言与常见错误类型,提供可执行的代码调整建议和最佳实践,帮助快速解决调试问题。
错误原因分析
最小修复版本(只修正协程与资源管理) 说明:
代码: import aiohttp import asyncio
async def fetch_user(session: aiohttp.ClientSession, user_id: int): url = f"https://api.example.com/users/{user_id}" async with session.get(url) as resp: resp.raise_for_status() data = await resp.json() return {"id": data["id"], "name": data["name"]}
async def main(): async with aiohttp.ClientSession() as session: users = await asyncio.gather(*(fetch_user(session, i) for i in [1, 2, 3])) print(users)
if name == "main": asyncio.run(main())
增强版(加入并发限制、超时与重试,确保稳定输出) 说明:
代码: import asyncio import aiohttp from aiohttp import ClientError
async def fetch_user(session: aiohttp.ClientSession, user_id: int, sem: asyncio.Semaphore, retries: int = 3, backoff: float = 0.5): url = f"https://api.example.com/users/{user_id}" attempt = 0 while True: try: async with sem: async with session.get(url) as resp: resp.raise_for_status() data = await resp.json() return {"id": data["id"], "name": data["name"]} except (ClientError, asyncio.TimeoutError) as e: attempt += 1 if attempt > retries: # 返回结构化错误,保证列表能够稳定输出 return {"id": user_id, "name": None, "error": f"{type(e).name}: {e}"} await asyncio.sleep(backoff * (2 ** (attempt - 1)))
async def main(): timeout = aiohttp.ClientTimeout(total=10) # 总超时 10 秒,可按需调整 connector = aiohttp.TCPConnector(limit=20) # 连接池限制 sem = asyncio.Semaphore(5) # 并发请求上限
async with aiohttp.ClientSession(timeout=timeout, connector=connector) as session:
tasks = [fetch_user(session, i, sem) for i in [1, 2, 3]]
results = await asyncio.gather(*tasks) # 不会抛出 RuntimeWarning/AttributeError
print(results)
if name == "main": asyncio.run(main())
额外建议
错误原因分析
下面给出两套可行且互斥的修复方案,请选择其一并统一全项目的模块系统。
方案A:统一为 ESM(现代模块,推荐) 目标:在整个项目中使用 ESM(import/export),并避免 CommonJS。
调整步骤
修改 package.json,添加 type 字段 { "name": "demo", "version": "1.0.0", "type": "module", "main": "index.js", "scripts": { "start": "node index.js" } }
将 utils.cjs 改为 ESM 文件 utils.js(或保留文件名但内容改为 ESM),并使用 export 文件:utils.js export function sum(a, b) { return a + b }
修正 index.js,确保 ESM 导入语法正确且包含文件扩展名 文件:index.js import express from 'express' import { readFileSync } from 'fs' import { sum } from './utils.js'
const app = express() app.get('/health', (_, res) => res.send('ok')) app.listen(3000, () => console.log('server started'))
注意事项(ESM)
方案B:统一为 CommonJS(传统模块) 目标:在整个项目中使用 CommonJS(require/module.exports),并移除/避免 ESM 语法。
调整步骤
保持或移除 package.json 的 type(不要设置 "type":"module") { "name": "demo", "version": "1.0.0", "main": "index.js", "scripts": { "start": "node index.js" } }
将 index.js 改为 CommonJS 语法(使用 require) 文件:index.js const express = require('express') const { readFileSync } = require('fs') const { sum } = require('./utils.js')
const app = express() app.get('/health', (_, res) => res.send('ok')) app.listen(3000, () => console.log('server started'))
将 utils.cjs 改名为 utils.js(或保留 .cjs 也可),统一使用 module.exports 文件:utils.js module.exports = { sum(a, b) { return a + b } }
运行 npm start
注意事项(CommonJS)
补充建议
问题原因分析
两种安全修复方案
方案 A:等待所有 worker 完成后,由单独的 goroutine 关闭 resCh(推荐) 原理:只有发送方(worker)知道何时不再发送,因此使用 WaitGroup 统计发送方数量,全部完成后再关闭 resCh,这样 main 的 range 能正常结束。
示例代码: package main
import ( "fmt" "sync" )
func worker(jobCh <-chan int, resCh chan<- int, wg *sync.WaitGroup) { defer wg.Done() for j := range jobCh { resCh <- j * 2 } }
func main() { jobCh := make(chan int, 5) resCh := make(chan int, 5)
var wg sync.WaitGroup
nWorkers := 2
nJobs := 5
// 启动 workers
wg.Add(nWorkers)
for i := 0; i < nWorkers; i++ {
go worker(jobCh, resCh, &wg)
}
// 生产任务
for i := 1; i <= nJobs; i++ {
jobCh <- i
}
close(jobCh) // 关闭任务通道,表示不再有新任务
// 关键点:等待所有 worker 完成后关闭 resCh
go func() {
wg.Wait()
close(resCh)
}()
// 消费结果直到 resCh 被关闭
for v := range resCh {
fmt.Println(v)
}
}
要点:
方案 B:按“已知结果数”读取固定次数,不依赖关闭 resCh 原理:如果结果个数可预知(等于任务数 nJobs),可以读取 nJobs 次即可,不必关闭 resCh;随后再等待 wg 保证 worker 都退出。
示例代码: package main
import ( "fmt" "sync" )
func worker(jobCh <-chan int, resCh chan<- int, wg *sync.WaitGroup) { defer wg.Done() for j := range jobCh { resCh <- j * 2 } }
func main() { jobCh := make(chan int, 5) resCh := make(chan int, 5)
var wg sync.WaitGroup
nWorkers := 2
nJobs := 5
wg.Add(nWorkers)
for i := 0; i < nWorkers; i++ {
go worker(jobCh, resCh, &wg)
}
for i := 1; i <= nJobs; i++ {
jobCh <- i
}
close(jobCh)
// 读取固定 nJobs 次
for i := 0; i < nJobs; i++ {
v := <-resCh
fmt.Println(v)
}
// 确保所有 worker 退出
wg.Wait()
}
要点:
并发最佳实践与注意事项
采用上述任意一个方案,你的程序都会打印 5 个结果并正常退出,不再发生死锁。
帮助用户快速定位代码中的错误原因,并提供清晰、具体的修复方案,以提升开发效率,减少调试时间。
在开发过程中遇到代码错误的开发者,可以用提示词快速找出问题所在,并获取适配的解决方案,节省时间与精力。
学习编程的新手,通过提示词可以更好理解错误背后的原因,加速学习进程并减少困惑。
从事质量保障的测试人员,用于快速分析测试过程中发现的错误并定位其来源,优化故障排查效率。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
半价获取高级提示词-优惠即将到期