热门角色不仅是灵感来源,更是你的效率助手。通过精挑细选的角色提示词,你可以快速生成高质量内容、提升创作灵感,并找到最契合你需求的解决方案。让创作更轻松,让价值更直接!
我们根据不同用户需求,持续更新角色库,让你总能找到合适的灵感入口。
本提示词帮助开发者快速定位代码中的问题,解释错误原因,并提供修正后的代码示例及优化建议,支持多语言代码调试与测试用例开发,提升调试效率和代码质量。
return(返回 None)。sum_of_squares(parse_numbers(" ")) 时,sum_of_squares 内部尝试遍历 nums,由于 nums 为 None,触发 TypeError: 'NoneType' object is not iterable。return 不带返回值等价于返回 None。当前代码对空白输入分支仅打印信息后直接 return,导致返回 None。sum_of_squares 假定传入参数是可迭代对象(如 list),当收到 None 时在 for n in nums: 处抛出 TypeError。[](从而平方和为 0),或显式抛出说明性异常。现状两者皆未满足。下面给出可直接运行的修复版本,包含:
[];对非数字行抛出带行号的 ValueError。# numbers.py
from typing import Iterable, List
def parse_numbers(text: str) -> List[int]:
"""
将多行文本解析为整数列表。
规则:
- 非 str 参数:抛出 TypeError
- 仅包含空白或为空:返回 []
- 非数字行:抛出 ValueError,包含行号与原始行内容
- 忽略空行与前后空格
"""
if not isinstance(text, str):
raise TypeError("text must be str")
# 空白输入:返回空列表,避免后续遍历 None 触发 TypeError
if not text.strip():
return []
nums: List[int] = []
for idx, line in enumerate(text.splitlines(), start=1):
s = line.strip()
if not s:
continue
try:
nums.append(int(s))
except ValueError as e:
# 显式报错并告知问题行
raise ValueError(f"non-numeric value on line {idx}: {line!r}") from e
return nums
def sum_of_squares(nums: Iterable[int]) -> int:
"""
计算给定整数序列所有元素的平方和。
"""
total = 0
for n in nums:
total += n * n
return total
if __name__ == "__main__":
# 示例:正常路径与空输入
sample = "1\n2\n3"
print(sum_of_squares(parse_numbers(sample))) # 期望 14
print(sum_of_squares(parse_numbers(" "))) # 期望 0
# 单元测试
import unittest
class TestNumbers(unittest.TestCase):
def test_normal(self):
text = "1\n2\n3"
nums = parse_numbers(text)
self.assertEqual(nums, [1, 2, 3])
self.assertEqual(sum_of_squares(nums), 14)
def test_empty_input(self):
for text in ("", " ", "\n\t \n"):
nums = parse_numbers(text)
self.assertEqual(nums, [])
self.assertEqual(sum_of_squares(nums), 0)
def test_mixed_spaces_and_empty_lines(self):
text = " 1 \n \n 2\n 3 \n"
nums = parse_numbers(text)
self.assertEqual(nums, [1, 2, 3])
self.assertEqual(sum_of_squares(nums), 14)
def test_non_numeric_line_raises(self):
text = "1\na\n3"
with self.assertRaises(ValueError) as cm:
parse_numbers(text)
self.assertIn("line 2", str(cm.exception))
def test_type_error_on_non_str(self):
with self.assertRaises(TypeError):
parse_numbers(123) # type: ignore
unittest.main(argv=["-m", "numbers"], exit=False)
简要改进说明
可选扩展
raise ValueError("empty input")
并调整对应测试期望。当前实现选择返回 [] 以满足题目给定测试条件。const json = res.json();json.data.map(...)res.json() 返回的是 Promise,未使用 await,导致 json 为 Promise,对 json.data 的访问得到 undefined,继续 .map 时抛出异常。Response.prototype.json() 是异步方法,返回 Promise。await 时,json 是一个 Promise 对象,不包含 data 属性;json.data 为 undefined,对其调用 .map 会抛 TypeError。undefined,并出现不一致的错误处理行为。下面给出可直接运行的修复版本,包含:
res.json() 使用 await// 修复后的实现:Node 18+
async function loadTodos(userId, fetchFn = globalThis.fetch) {
const url = `https://example.test/api/todos?userId=${userId}`;
try {
const res = await fetchFn(url);
if (!res.ok) {
console.error(`loadTodos http error: HTTP ${res.status} url=${url}`);
return [];
}
// FIX: 必须 await
const json = await res.json();
// 防御式校验:确保 json.data 为数组
const data = Array.isArray(json?.data) ? json.data : [];
return data.map((t) => String(t?.title ?? "").toUpperCase());
} catch (err) {
// 统一错误处理:记录并返回空数组,避免未处理拒绝
console.error(`loadTodos failed: url=${url}`, err);
return [];
}
}
/* ---------------------- 基于 mock fetch 的可运行测试 ---------------------- */
// 成功返回:{ data: [{title:'a'}, {title:'b'}] } -> ['A', 'B']
function mockFetchSuccess() {
return Promise.resolve({
ok: true,
status: 200,
json: async () => ({ data: [{ title: "a" }, { title: "b" }] }),
});
}
// HTTP 非 2xx
function mockFetchHttpError() {
return Promise.resolve({
ok: false,
status: 500,
json: async () => ({ message: "server error" }),
});
}
// 网络异常(例如连接超时、DNS 失败等)
function mockFetchNetworkError() {
return Promise.reject(new Error("network failure"));
}
// 简单演示性“单测”(无需依赖测试框架)
(async () => {
// 成功用例
const r1 = await loadTodos(7, mockFetchSuccess);
console.log("success case:", r1); // 期望: ['A', 'B']
// HTTP 错误用例
const r2 = await loadTodos(7, mockFetchHttpError);
console.log("http error case:", r2); // 期望: []
// 网络异常用例
const r3 = await loadTodos(7, mockFetchNetworkError);
console.log("network error case:", r3); // 期望: []
})();
/*
改进说明:
- 修复:为 res.json() 添加 await,避免将 Promise 当作对象使用。
- 稳健性:对非 2xx 响应、结构不符合预期的响应进行兜底处理,避免再次抛错。
- 统一错误处理:所有异常路径均记录日志并返回 [],避免未处理的 Promise 拒绝。
- 可测试性:将 fetch 作为可注入依赖,便于使用 mock 进行单元测试。
测试建议:
- 使用 Jest 等框架时,可用 jest.fn() 模拟 fetch,并对不同分支(成功、HTTP 错误、异常抛出、data 非数组、title 非字符串)分别断言返回值与 console.error 调用次数/内容。
- 可增加超时与中止测试(AbortController)以覆盖长耗时场景。
*/
提供两种可直接运行的修复方案:
运行说明:
完整可运行代码(main.go):
package main
import (
"fmt"
"runtime"
"sync"
"sync/atomic"
)
// 方案 A:使用 sync.Mutex 保护普通 map
func runWithMutex() int {
var (
mu sync.Mutex
m = map[string]int{}
wg sync.WaitGroup
)
inc := func(key string, n int) {
defer wg.Done()
for i := 0; i < n; i++ {
mu.Lock()
m[key] = m[key] + 1
mu.Unlock()
}
}
for i := 0; i < 10; i++ {
wg.Add(1)
go inc("ok", 1000)
}
wg.Wait()
return m["ok"]
}
// 方案 B:使用 sync.Map,值为 *atomic.Int64,避免锁下读改写
func runWithSyncMap() int64 {
var (
counts sync.Map // map[string]*atomic.Int64
wg sync.WaitGroup
)
inc := func(key string, n int) {
defer wg.Done()
// 为 key 放入一个原子计数器(仅首次需要存储)
v, _ := counts.LoadOrStore(key, &atomic.Int64{})
counter := v.(*atomic.Int64)
for i := 0; i < n; i++ {
counter.Add(1) // 原子自增
}
}
for i := 0; i < 10; i++ {
wg.Add(1)
go inc("ok", 1000)
}
wg.Wait()
v, _ := counts.Load("ok")
return v.(*atomic.Int64).Load()
}
func main() {
runtime.GOMAXPROCS(4)
c1 := runWithMutex()
fmt.Println("mutex count:", c1) // 期望 10000
c2 := runWithSyncMap()
fmt.Println("sync.Map count:", c2) // 期望 10000
}
测试代码(main_test.go):
package main
import (
"runtime"
"testing"
)
func TestMutex(t *testing.T) {
runtime.GOMAXPROCS(4)
got := runWithMutex()
if got != 10000 {
t.Fatalf("mutex count want 10000, got %d", got)
}
}
func TestSyncMap(t *testing.T) {
runtime.GOMAXPROCS(4)
got := runWithSyncMap()
if got != 10000 {
t.Fatalf("sync.Map count want 10000, got %d", got)
}
}
验证与运行:
简要改进与性能权衡:
帮助开发者快速定位代码中的问题,提供清晰的问题原因分析,并给出精准的修正建议,以提升代码调试效率和开发体验。
帮助编程初学者快速理解错误,提供详细修正建议,从而加速他们的学习进步。
在复杂系统开发中快速定位代码问题,节省时间并专注于核心逻辑的实现。
高效处理开发中发现的错误代码,快速生成修复方案,优化测试工作流程。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
半价获取高级提示词-优惠即将到期