Python捕获TypeError与NameError异常问题求助
问题原因分析
核心原因:异常发生在函数执行前
执行print(calculate_average([1, 2, a]))时,Python会先解析函数的参数——也就是先创建列表[1, 2, a]。此时变量a未定义,Python直接抛出NameError,这个异常发生在calculate_average函数的代码开始执行之前,根本没进入函数内部的try-except块,自然无法被捕获。
对比正常场景的逻辑
看你测试通过的两个场景:
calculate_average([1, 2, 3]):列表是合法数字列表,能正常传递给函数,计算逻辑顺利执行。calculate_average([1, 2, 'a']):列表里的'a'是字符串常量,列表创建过程无错误,参数能正常传入函数。此时sum(number_list)因为包含非数值类型触发TypeError,被函数内的except TypeError捕获,符合预期。
额外说明
你函数里的except NameError其实是无效的,因为这个分支不可能在函数执行过程中触发。只有当函数内部代码引用未定义的变量时才会触发函数内的NameError,但你的情况是参数列表在函数外部就解析失败了,函数体代码根本没机会运行。
内容的提问来源于stack exchange,提问作者Alberto Alvarez
相关产品推荐
相关产品推荐

