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

异常处理打印语句无法生效,但错误类型判断正常?技术求助

问题分析与修复方案

你的代码无法打印自定义错误消息,核心问题出在类型判断逻辑错误和判断顺序不合理,导致自定义异常从未被触发:

问题点拆解

  • 错误的类型比较:type(r) == 'complex'、type(r) == str是完全错误的写法。type()返回的是类型对象(比如<class 'complex'>),而非字符串,和字符串比较永远为False,你的自定义异常根本不会被抛出。
  • 判断顺序错误:复数、字符串会先进入r < 0的判断,触发Python内置异常(复数无法比较大小、字符串不能和数字比较),直接跳过了你的自定义异常逻辑。

修复后的代码

import numpy as np

def compute_circle_area(r):
    try:
        # 先处理类型问题,避免后续数值比较触发内置异常
        if isinstance(r, complex):
            raise TypeError('Argument is complex')
        elif isinstance(r, str):
            raise TypeError('Argument is wrong type')
        elif r < 0:
            raise ValueError('Argument < 0')
  
        a = np.pi * r * r

    except ValueError as ve:
        print("Value Error", ve)
    except TypeError as te:
        print("Type Error", te)
    else:
        print('Argument works, solution is: ', a)
        return a  # 补充返回值,避免原函数默认返回None
    finally:
        print("Let's continue")

# 测试用例
print(compute_circle_area(2.1))
print(compute_circle_area(2+1j))
print(compute_circle_area(-2.1))
print(compute_circle_area('radius'))

修复说明

  1. 标准类型判断:用isinstance()替代错误的字符串比较,这是Python判断类型的标准写法,还支持继承场景的类型检查。
  2. 调整判断顺序:先检查类型问题(复数、字符串),再判断数值是否为负,确保自定义异常能被优先触发。
  3. 补充返回值:原函数在正常分支没有返回计算结果,导致打印函数调用时输出None,新增return a返回正确的面积值。

运行结果(符合预期)

Argument works, solution is:  13.854423602330987
13.854423602330987
Let's continue
Type Error Argument is complex
None
Let's continue
Value Error Argument < 0
None
Let's continue
Type Error Argument is wrong type
None
Let's continue

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:40:29