LocalPythonExecutor: for/while ... else 会默默地丢弃 else 子句; list += <非列表可迭代对象> 会被错误拒绝
LocalPython Exector'(src/smolagents/local python executor.py')沉默地执行for.else'和while.else'的构思不正确:`else'条款从未运行过,也没有产生错误。
评价'和评价'改为.body'、.target'、.test ' 脱离AST节点,但绝不提及.orse',即`else:'块所在的领域。 代码解析无错误(它不作为不支持的构造被拒绝,与"相配"不同),因此‘else'块被跳过——一个默地错误的结果,比起高起的‘解释错误'更糟糕.
通过运行当前“主要”分支执行器确认:
代码 = ""
结果 = []
i 在范围(3):
附录(一)
其他情况:
附录(100)
最后回答( 结果)
"" "" ""
- 真正的Python:`[0、1、2、100]'
- " 地方Python执行官 " :
[0, 1, 2] -- --else ' 分支从未执行或警告。
一样的行为,"同时... . else"。 LLM使用for.else'/while.else' idiom(检查一个没有`break'的循环完成后是否静静地产生错误的代理状态)生成的任何代码动作。
** 同一通行证、同一文件中发现的二级错误:** “评价-augassign”在列表中处理QQ比实际的Python更严格:
如果存在( 表示. op, ast) 。 添加:
如果存在( 当前值, 列表) :
如果不是静态( 值 to add, 列表) :
提升解释器Error( f) 不能将非列表值 {value to add} 添加到列表中 。 )
当前 值 值 到 添加
真正的Python的list.-iadd 通过扩展语义(x = [1, 2;x += (3, 4)')接受任何可移动的语义(x = [1, 2, 3, 4]')',但这引起了`解释错误:不能将非列表值(3, 4)添加到列表中.' 对于同一代码——拒绝有效的ZPython 一种由ZZTERM9 授权的代码动作是合理可能产生的(tups, sets, generum, string).
两者均通过执行当前未修改的 “ local python executor.py”(与“main”相对应) 和比较同一片段的Python 3.13 输出得到确认。
- 复制
从 smolagents. local python executor 导入本地 Python 执行器
执行器 = localPython 执行器 (["*"])
# Bug 1: 静静地放下来
执行器 ("")
结果 = []
i 在范围(3):
附录(一)
其他情况:
附录(100)
最后回答( 结果)
""(""".
# 返回 [0, 1, 2] 而不是 [0, 1, 2, 100]
# Bug 2: 列表 QQ 不列出可错误拒绝
执行器 ("")
x = [1, 2] (中文(简体) ).
页:1
最后回答( x)
""(""".
# 增加口译错误而不是返回 [1, 2, 3, 4]
确定方向
评价'/评价'应执行节点.orse',当循环完成而未发生突破'时。 评价 augasign'应接受名单'的任何可重复之处,而不仅仅是名单',与名单'相匹配.
内容来源: huggingface/smolagents