安全扫描
OpenClaw
安全
high confidenceThe 技能 is an instruction-only 图形界面de about Python mutable default-argument bugs; its clAIms, required resources, and instructions are coherent and proportionate.
评估建议
此技能仅以纯文本形式无害地解释 Python 编码陷阱及其修复方法,无需安装、无需凭证,也不会指示智能体读取或传输文件。你可安全启用或使用它来获取关于可变默认参数的指引。若打算采纳其建议,建议启用 linter(pylint/ruff)并在整个仓库中搜索形如 '=[]'、'={}'、'=set()' 的模式以定位需修复的实例。若需更严格保证,可自行查看 SKILL.md——它包含全部运行时指令且不执行任何外部操作。...详细分析 ▾
✓ 用途与能力
名称和描述与 SKILL.md 内容一致。该技能仅说明一个常见的 Python 陷阱及其补救方法;不请求任何与此目的无关的二进制文件、凭据或配置。
✓ 指令范围
说明仅限于解释缺陷、展示安全代码模式、提供代码搜索启发式方法(如签名 '=[]'、'={}'、'=set()'),以及推荐 linter(pylint/ruff)。该技能不会指示 agent 读取系统文件、访问环境变量或向外部传输数据。
✓ 安装机制
未提供安装规范或代码文件(仅含说明)。安装此技能时不会向磁盘写入任何内容,也不会由安装程序执行任何操作。
✓ 凭证需求
该技能无需环境变量、凭据或配置文件路径,无需任何敏感权限即可完成所述功能。
✓ 持久化与权限
始终为 false,且该 skill 可由用户调用;允许自主调用(平台默认),但 skill 的指令无害,不需要提升或持续的系统权限。
安全有层次,运行前请审查代码。
运行时依赖
🖥️ OSmacOS · Linux · Windows
安装命令
点击复制官方npx clawhub@latest install python-mutable-default-args
镜像加速npx clawhub@latest install python-mutable-default-args --registry https://cn.longxiaskill.com
技能文档
python-mutable-default-args Python 在函数定义时一次性计算默认参数值,而非每次调用时。若默认值为可变对象(list、dict、set),该对象会被所有使用默认值的调用共享。函数内修改它会改变后续所有调用的默认值。该 bug 在第二次或更晚调用才显现,产生难以追踪的状态相关失败。
症状
函数在默认 list 或 dict 中累积数据,会在多次调用间无限增长。 本应无状态的函数在第二次调用时返回不同结果。 单元测试单独运行通过,一起运行时因共享状态失败。 若显式传入参数,bug 消失。def add_item(item, items=[]): # ← 共享列表 items.append(item) return items
add_item("a") # ["a"] add_item("b") # ["a", "b"] ← 意外;第二次调用看到第一次的数据
解决办法 用 None 作默认值,在函数体内初始化可变对象:
def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
这是 Python 官方惯用法。每次省略 items 都会得到新列表。
同样适用于 dict、set 及其他可变类型。
规则:绝不要把可变对象作为默认参数。 代码审查时,扫描函数签名中的 =[]、={}、=set() 作为该模式的启发式线索。 linter(pylint 规则 W0102、ruff 规则 B006)会自动标记——若代码库未启用,请打开。