You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用except捕获SyntaxError、NameError时出现无效语法报错问题

问题排查与修复

首先逐个拆解现有代码的错误:

  • 参数定义错误:你定义的printing函数仅接收1个位置参数,调用时传入了4个参数,语法层面会直接抛出TypeError,无法进入函数逻辑。
  • 异常提前触发:你调用函数时直接写的1o是无效Python字面量,o是未定义变量,这两类错误会在Python解释器解析代码阶段(还没执行函数逻辑)就抛出,完全无法被函数内的try-except捕获,所以程序执行初期就终止。
  • 异常捕获位置错误:你把try-except套在整个for循环外层,只要有一个元素触发异常,整个遍历直接终止,所有元素都会被归类到b列表,不符合逐元素判断的需求。
  • 变量命名不规范:使用list作为参数名会覆盖Python内置的list类,属于错误编码习惯。

修复代码

要实现逐元素判断是否触发SyntaxError或NameError的需求,我们需要将待检测内容统一以字符串形式传入,避免解析阶段提前报错,同时将异常捕获逻辑放在循环内部,逐元素校验:

def printing(*args):
    a = []
    b = []
    for item in args:
        try:
            # 尝试解析当前元素
            eval(item)
            # 无异常则追加到a,若需要存实际值而非字符串可改为eval(item)
            a.append(item)
        except (SyntaxError, NameError):
            # 触发指定异常则追加到b
            b.append(item)
    return a, b

# 所有待检测内容以字符串形式传入
a_res, b_res = printing("1", "2", "1o", "o")
print(f"a = {a_res} b = {b_res}")

运行后输出结果与预期完全一致:a = ['1', '2'] b = ['1o', 'o']

内容的提问来源于stack exchange,提问作者Kokin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:24:04