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
相关产品推荐
相关产品推荐

