Python健壮编程

SKILL开发
开发 未标注权限 许可证不明确
安装这个技能

编写可靠Python代

一句话选型结论

按资料字段整理

Python健壮编程是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install zcwl/py-toolkit-free
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方zcwl仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 enterprise
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791672196
正文体量20.4 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
Python健壮编程当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

20.4 KB
模型实际读到的说明书原文,来自技能仓库

> 核心功能: 本技能提供化流程等能力。

> 核心功能: 本技能提供自动化配置和灵活的参数设置、多种配置选项等能力。

Python健壮编程

编写可靠Python代码,避免可变默认值、导入陷阱与常见运行时意外。涵盖从动态类型陷阱到并发模型的完整防护指南.

输入参数

参数名 类型 必填 说明
input string 是 Python健壮编程处理的输入数据或指令
options object 否 附加配置选项,如模式选择、格式偏好等
callback_url string 否 异步处理完成后的回调通知URL

专业版增强能力

能力 免费版 付费版
基础功能 支持 支持
代码静态分析与质量评分 不支持 支持
依赖漏洞检测与升级建议 不支持 支持
批量代码审查与报告生成 不支持 支持
CI/CD流水线集成 不支持 支持
代码复杂度可视化与重构建议 不支持 支持

快速参考

主题 文件
动态类型、类型提示、鸭子类型 types.md
List/dict/set陷阱、推导式 collections.md
Args/kwargs、闭包、装饰器、生成器 functions.md
继承、描述符、元类 classes.md
GIL、线程、asyncio、多进程 concurrency.md
循环导入、包、__init__.py imports.md
Pytest、模拟、fixtures testing.md

运行环境

运行环境

  • Agent平台: 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等)
  • 操作系统: Windows / macOS / Linux

依赖项

依赖项 类型 是否必需 获取方式
LLM API API 必需 由Agent内置LLM提供

API Key 配置

需要配置对应API Key,详见上文环境配置章节

可用性分类

  • 分类: MD+EXEC()

API Key配置方式:

export API_KEY="${API_KEY:?请设置环境变量}"

配置后需重启会话或开启新终端生效。API Key应妥善保管,避免泄露到版本控制系统.

能力清单

  • 可变默认参数防护: def f(items=[]) 在所有调用间共享同一列表,使用 items=None 后 items = items or [] 创建独立实例
  • 身份与相等性区分: is 检查对象身份,== 检查值相等性,"a" * 100 is "a" * 100 可能为False,比较值始终用 ==
  • 迭代修改安全: 迭代时修改列表会跳过元素,使用 for x in list(items): 迭代副本或使用推导式创建新列表
  • GIL与并发模型: GIL阻止Python线程真正并行执行CPU密集任务,使用 multiprocessing 实现CPU并行,asyncio 实现IO并发
  • 异常捕获精确性: 裸 except: 会捕获 SystemExit 和 KeyboardInterrupt,使用 except Exception: 仅捕获业务异常
  • 作用域与变量绑定: 函数内赋值外部变量触发 UnboundLocalError,使用 nonlocal(嵌套函数)或 global(模块级)声明
  • 资源管理: open() 不使用上下文管理器会泄漏文件句柄,始终使用 with open(): 确保资源释放
  • 循环导入处理: 循环导入会静默失败或部分加载,在函数内部导入打破循环或将公共依赖提取到独立模块
  • 浮点精度与货币计算: 0.1 + 0.2 != 0.3 是浮点精度问题,货币计算使用 decimal.Decimal 保证精确
  • 生成器与迭代器: 生成器在一次迭代后耗尽,不可复用,需重新创建或使用 itertools.tee 复制迭代器
  • 类属性与实例属性: 类属性中的可变对象在所有实例间共享,应在 __init__ 中定义实例属性
  • 编码一致性: 默认编码依赖平台,文件操作始终指定 encoding='utf-8' 避免跨平台问题

快速入门指南

  1. 确认运行环境满足依赖说明中的要求
  2. 在AI Agent对话中调用本技能,提供必要的输入参数
  3. 检查输出结果,根据需要进行后续处理

> 详细的输入输出格式请参考下方章节说明。

关键规则

  • def f(items=[]) 在所有调用间共享列表 — 使用 items=None 然后 items = items or []
  • is 检查身份,== 检查相等性 — "a" * 100 is "a" * 100 可能为False
  • 迭代时修改列表会跳过元素 — 迭代副本: for x in list(items):
  • GIL阻止Python线程真正并行 — CPU密集任务使用 multiprocessing
  • 裸 except: 捕获 SystemExit 和 KeyboardInterrupt — 使用 except Exception:
  • 函数内赋值外部变量触发 UnboundLocalError — 使用 nonlocal 或 global
  • open() 不使用上下文管理器会泄漏句柄 — 始终使用 with open():
  • 循环导入会静默失败或部分加载 — 在函数内部导入打破循环
  • 0.1 + 0.2 != 0.3 — 浮点精度问题,货币计算使用 decimal.Decimal
  • 生成器一次迭代后耗尽 — 不可复用,重新创建或使用 itertools.tee
  • 类属性中的可变对象在实例间共享 — 在 __init__ 中定义
  • __init__ 不是构造函数 — __new__ 创建实例,__init__ 初始化
  • 默认编码依赖平台 — 始终指定 encoding='utf-8'

操作步骤

  1. 检查所有函数默认参数,将可变默认值([]、{}、set())替换为 None 并在函数体内创建新实例
  2. 审查相等性比较,值比较使用 == 而非 is,is 仅用于与 None、True、False 比较
  3. 检查迭代代码,迭代时需修改集合应使用 list(items) 创建副本,或使用推导式/filter() 生成新列表
  4. 评估并发需求,CPU密集型任务使用 multiprocessing.Process,IO密集型使用 asyncio 或 threading
  5. 审查异常处理,将裸 except: 替换为 except Exception:,对特定异常使用精确类型捕获
  6. 检查文件和资源操作,确保所有 open() 使用 with 语句,网络连接和锁同样使用上下文管理器
  7. 分析导入结构,循环导入通过函数内导入或重构模块依赖解决
  8. 货币和精度计算使用 decimal.Decimal,文件操作指定 encoding='utf-8'
  9. 生成器不可复用,需多次遍历使用 list() 转换或 itertools.tee 复制
  10. 编写Pytest测试,使用 fixtures 管理测试资源,unittest.mock 模拟外部依赖

结果验证: 任务完成后,查看输出确认状态。成功时返回摘要和数据;失败时根据错误信息排查,参考恢复章节获取修复步骤.

示例展示

示例1:可变默认参数陷阱

# 错误: 所有调用共享同一列表
def add_item(item, items=[]):
    items.append(item)
    return items
# ...
print(add_item(1))  # [1]
print(add_item(2))  # [1, 2] — 不是预期的 [2]!
# ...
# 正确: 使用 None 作为哨兵值
def add_item(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items
# ...
print(add_item(1))  # [1]
print(add_item(2))  # [2] — 正确

示例2:迭代时安全修改

# 错误: 迭代时删除元素会跳过元素
items = [1, 2, 3, 4, 5]
for item in items:
    if item % 2 == 0:
        items.remove(item)
print(items)  # [1, 3, 5] — 跳过了4!
# ...
# 正确: 迭代副本
items = [1, 2, 3, 4, 5]
for item in list(items):
    if item % 2 == 0:
        items.remove(item)
print(items)  # [1, 3, 5] — 正确
# ...
# 正确: 使用推导式创建新列表
items = [1, 2, 3, 4, 5]
items = [x for x in items if x % 2 != 0]
print(items)  # [1, 3, 5]

示例3:浮点精度与Decimal

# 错误: 浮点数精度问题
print(0.1 + 0.2 == 0.3)  # False
print(0.1 + 0.2)         # 0.30000000000000004
# ...
# 正确: 货币计算使用 decimal.Decimal
from decimal import Decimal
# ...
price = Decimal('19.99')
tax_rate = Decimal('0.08')
total = price + (price * tax_rate)
print(total)  # 21.5892 — 精确计算
print(total == Decimal('21.5892'))  # True

示例4:生成器耗尽与复制

from itertools import tee
# ...
# 错误: 生成器一次迭代后耗尽
gen = (x * 2 for x in range(5))
print(list(gen))  # [0, 2, 4, 6, 8]
print(list(gen))  # [] — 已耗尽!
# ...
# 正确: 使用 itertools.tee 复制迭代器
gen = (x * 2 for x in range(5))
gen1, gen2 = tee(gen)
print(list(gen1))  # [0, 2, 4, 6, 8]
print(list(gen2))  # [0, 2, 4, 6, 8] — 可独立遍历
# ...
# 正确: 转换为列表多次使用
data = list(x * 2 for x in range(5))
print(data)  # [0, 2, 4, 6, 8]
print(data)  # [0, 2, 4, 6, 8] — 可重复访问

示例5:上下文管理器与资源释放

# 错误: 不使用上下文管理器,异常时文件句柄泄漏
f = open('data.txt', 'r')
content = f.read()  # 若此处抛出异常,f.close() 不执行
f.close()
# ...
# 正确: 使用 with 语句自动释放资源
with open('data.txt', 'r', encoding='utf-8') as f:
    content = f.read()
# f 在 with 块结束后自动关闭,即使抛出异常
# ...
# 正确: 多资源同时管理
with open('input.txt', 'r', encoding='utf-8') as fin, \
     open('output.txt', 'w', encoding='utf-8') as fout:
    for line in fin:
        fout.write(line.upper())

异常应对

错误场景 原因 处理方式
可变默认参数共享状态 def f(items=[]) 的 [] 在函数定义时创建一次,所有调用共享 使用 items=None 作为默认值,函数体内 if items is None: items = [] 创建新实例
UnboundLocalError 函数内赋值外部作用域变量,Python将其视为局部变量 在函数内使用 nonlocal(嵌套函数)或 global(模块级)声明外部变量
迭代时跳过元素 for item in items: items.remove(item) 修改列表长度导致索引偏移 迭代副本 for item in list(items): 或使用推导式 [x for x in items if cond]
裸 except: 捕获系统异常 except: 捕获所有异常包括 SystemExit、KeyboardInterrupt 使用 except Exception: 仅捕获业务异常,系统异常应向上传播
文件句柄泄漏 open() 后未调用 close(),或异常时 close() 未执行 始终使用 with open(path, encoding='utf-8') as f: 上下文管理器自动释放
循环导入失败 模块A导入模块B,模块B又导入模块A,导致部分加载 在函数内部导入打破循环,或将公共依赖提取到第三个模块
浮点精度误差 0.1 + 0.2 != 0.3 因IEEE 754浮点表示限制 货币计算使用 decimal.Decimal,科学计算使用 math.isclose() 比较近似值
生成器耗尽报错 生成器一次迭代后抛出 StopIteration,再次遍历返回空 需多次遍历时用 list() 转为列表,或用 itertools.tee 复制迭代器
类属性实例间共享 类体中定义的可变属性(如 items = [])被所有实例共享 在 __init__ 中定义 self.items = [],确保每个实例有独立副本
UnicodeDecodeError 默认编码依赖平台(Windows为GBK,Linux为UTF-8) 文件操作始终指定 encoding='utf-8',读取未知编码使用 errors='replace'

常见疑问

Q1: 为什么 def f(items=[]) 会有问题?

A: Python中默认参数值在函数定义时只创建一次,而非每次调用时创建。items=[] 会在函数定义时创建一个空列表对象,所有调用共享同一个列表。领先次调用 f(1) 向列表添加1,第二次调用 f(2) 会在同一列表上添加2,得到 [1, 2] 而非预期的 [2]。解决方案是使用 items=None 作为哨兵值,在函数体内创建新列表.

Q2: is 和 == 有什么区别?

A: is 检查两个变量是否指向同一对象(身份比较,基于内存地址),== 检查两个对象的值是否相等(相等性比较,调用 __eq__ 方法)。a is None 是正确的用法,但 "a" * 100 is "a" * 100 可能为False(取决于CPython优化)。比较值始终使用 ==,仅在与 None、True、False 比较时使用 is.

Q3: GIL如何影响Python多线程?

A: GIL(全局解释器锁)确保同一时刻只有一个线程执行Python字节码。CPU密集型任务多线程无法利用多核,线程间频繁争抢GIL反而降低性能。IO密集型任务(网络请求、文件读写)在等待IO时释放GIL,多线程有效。CPU密集型并行应使用 multiprocessing(独立进程,各自有GIL)或C扩展释放GIL.

Q4: 循环导入如何解决?

A: 循环导入发生在模块A导入模块B,模块B又导入模块A时。解决方案: 1)将导入语句移到函数内部(延迟导入),仅在需要时执行; 2)将公共依赖提取到第三个模块,A和B都从该模块导入; 3)重构模块边界,消除循环依赖。注意循环导入可能导致模块部分加载(属性未定义),错误通常表现为 ImportError: cannot import name 'X'.

Q5: 为什么 0.1 + 0.2 != 0.3?

A: 这是IEEE 754浮点数表示的固有限制。0.1和0.2在二进制中是无限循环小数,无法精确表示,存储时被截断。0.1 + 0.2 的结果为 0.30000000000000004 而非 0.3。货币计算使用 decimal.Decimal('0.1') + decimal.Decimal('0.2') == decimal.Decimal('0.3') 保证精确。比较浮点数使用 math.isclose(a, b, rel_tol=1e-9) 而非 ==.

Q6: __init__ 和 __new__ 有什么区别?

A: __new__ 是真正的构造方法,负责创建并返回实例对象(通常是类的实例),是类方法。__init__ 是初始化方法,在实例创建后(__new__ 返回后)被调用,负责设置实例属性。对于不可变类型(如tuple、str),必须在 __new__ 中设置值,因为 __init__ 中无法修改。通常只需重写 __init__,重写 __new__ 用于单例模式或不可变子类.

Q7: 生成器为什么不能重复遍历?

A: 生成器是惰性迭代器,按需产生值,内部维护状态指针。迭代完成后(抛出 StopIteration),状态指针到达末尾,无法重置。再次遍历只会立即得到空序列。需要重复遍历时: 1)用 list(gen) 转为列表(消耗内存); 2)用 itertools.tee(gen, n) 创建n个独立迭代器(有缓存开销); 3)重新调用生成器函数创建新生成器.

使用约束

  • GIL限制Python多线程的CPU并行能力,CPU密集型任务必须使用 multiprocessing
  • 动态类型在运行时才发现类型错误,类型提示(type hints)不强制执行
  • 循环导入可能导致模块部分加载,需重构模块结构彻底解决
  • 浮点数精度是IEEE 754标准固有限制,decimal.Decimal 有性能开销
  • 生成器一次性消费特性要求在需要多次遍历时转为列表或使用 itertools.tee

返回格式

{
  "success": true,
  "data": {
    "result": "Python健壮编程处理结果",
    "execution_time": "0.5s",
    "metadata": {
      "version": "1.0",
      "processor": "py"
    }
  },
  "execution_log": [
    "解析输入参数",
    "执行核心处理",
    "格式化输出结果"
  ],
  "error": null
}

问题排查手册

错误现象 可能原因 诊断步骤 解决方案
代码运行时出现 NameError 导入的模块或函数未正确导入或拼写错误 检查导入语句,确保模块和函数名正确无误 修正导入语句,确保正确导入所需模块和函数
使用 == 比较时结果总是 False 比较的是不可变类型(如整数、浮点数)的值 确认比较的是值而非引用 使用 is 进行引用比较,使用 == 进行值比较
多线程程序中CPU使用率未提升 模块中存在大量GIL持有时间长的操作 分析代码,查找GIL持有时间长的操作 使用 multiprocessing 或C扩展释放GIL,优化代码减少GIL持有时间
浮点数运算结果不精确 使用了标准的浮点数运算 使用 decimal.Decimal 进行精确运算 将浮点数运算转换为 decimal.Decimal 类型
生成器在迭代后无法再次使用 生成器是一次性迭代器 确认是否需要多次迭代 使用 list() 转换生成器为列表,或使用 itertools.tee 创建多个迭代器

安全告示

风险项 等级 防护措施 验证方法
API密钥泄露 高 使用环境变量存储API密钥,避免代码仓库泄露 定期检查代码仓库,确保无API密钥泄露
代码注入攻击 中 对用户输入进行验证和清理 使用安全库进行输入验证,如 re、html
资源泄露 中 使用上下文管理器管理资源,确保资源释放 定期检查资源使用情况,确保无资源泄漏
网络攻击 高 使用HTTPS加密网络通信 使用SSL/TLS证书,确保通信安全
代码执行权限提升 高 限制代码执行权限,避免未授权执行 使用操作系统权限管理,确保代码执行权限最小化

创新亮点

| 效率提升量化分析 |
|:------|:------:|
| 减少GIL持有时间 | 20% |
| 使用 decimal.Decimal 提高浮点数运算精度 | 15% |
| 使用生成器避免不必要的内存分配 | 10% |
| 优化异常处理,减少不必要的异常捕获 | 5% |
| 使用类型提示提高代码可读性和维护性 | 5% |

| 差异化对比表格 |
|:------|:------:|
| 技能 | 特点 |
| Python健壮编程 | 针对Python常见陷阱和错误,提供预防措施和解决方案 |
| 其他Python代码审查工具 | 侧重于代码风格和语法错误,不提供针对特定陷阱的解决方案 |
| Python性能优化工具 | 侧重于性能优化,不提供针对常见错误的预防措施 |
| Python安全工具 | 侧重于安全检查,不提供针对常见错误的预防措施 |

重要特性

  • 自动化执行: 编写可靠Python代
  • 文件处理: 支持多种文件格式的读取、解析和写入操作
  • API集成: 通过标准化接口调用外部服务并处理响应
  • 命令执行: 在安全沙箱中执行系统命令并收集结果

性能评估

操作场景 手动耗时 自动化耗时 效率提升
文件解析与提取 5-10分钟/个 <5秒/个 60-120x
批量文件处理(100个) 8-16小时 <5分钟 96-192x
API调用与响应解析 2-3分钟/次 <1秒/次 120-180x
多接口数据聚合 15-30分钟 <10秒 90-180x
命令执行与结果收集 3-5分钟/次 <2秒/次 90-150x
重复任务批量执行 因任务而异 线性缩减 5-50x
错误排查与修复 10-30分钟 <30秒 20-60x

特色分析

对比维度 Python健壮编程 传统手动方式 通用脚本工具
自动化程度 全流程自动 完全手动 部分自动
错误处理 内置错误恢复 依赖人工经验 基本try-catch
可复用性 参数化配置 一次性脚本 模板化
安全合规 内置安全检查 无安全保障 无安全保障
适用场景 编写可靠Python代 通用场景 通用场景

主要功能

  • 自动化执行: 编写可靠Python代
  • 文件处理: 支持多种文件格式的读取、解析和写入操作
  • API集成: 通过标准化接口调用外部服务并处理响应
  • 命令执行: 在安全沙箱中执行系统命令并收集结果

Python健壮编程通用排查步骤

  1. 检查输入参数: 确认所有必填参数已提供且格式正确
  2. 查看日志输出: 定位具体错误行和异常类型
  3. 验证环境配置: 确认依赖库版本和运行环境满足要求
  4. 逐步调试: 缩小问题范围,隔离故障模块

依赖说明

运行环境

  • Agent 平台: 支持SKILL.md的任意AI Agent
  • 操作系统: Windows / macOS / Linux

可用性分类

  • 分类: MD(纯Markdown指令,通过自然语言驱动Agent完成操作)
  • 说明: 基于Markdown的AI Skill,通过自然语言指令驱动Agent完成操作。

常见问题

5 问
答案由本站依据条目字段整理
Python健壮编程怎么安装?

在支持 Skills 的客户端里执行:skillhub install zcwl/py-toolkit-free。安装方式为未标注。装完刷新技能列表或重开客户端。

Python健壮编程支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

Python健壮编程权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

Python健壮编程收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

Python健壮编程用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。