You need to enable JavaScript to run this app. Python创建自定义异常时报错‘check未定义’,求问题排查修正
优惠活动
大模型
产品
解决方案
定价
更多

Python创建自定义异常时报错‘check未定义’,求问题排查修正

错误点汇总
  • 缩进规则违反:Python强制要求缩进区分代码块,原代码中MyException类的__init__方法、全局函数check的全部内部逻辑都没有正确缩进,甚至check函数会被误识别为MyException的内部方法,全局调用时就会触发check not defined报错。
  • 遍历对象引用错误:check函数接收的入参是存储账户信息的字典x,但代码中遍历写的是check.items(),错误把函数自身当成字典调用。
  • 异常参数不匹配:抛出MyException时传入了「提示字符串」「用户名」两个参数,但原异常类的__init__方法仅定义了1个接收参数,会触发参数数量不符的报错。
  • 缺少异常字符串表示逻辑:未重写__str__方法的情况下,捕获异常后打印实例不会输出自定义错误信息,只会输出对象内存地址。
修正后可正常运行的代码
# 自定义异常类
class MyException(Exception):
    def __init__(self, arg):
        self.msg = arg
    # 重写__str__方法,打印自定义错误信息
    def __str__(self):
        return self.msg

def check(x):
    for k,v in x.items():
        print('Name={} Balance={}'.format(k,v))
        if(v<2000):
            # 提前拼接错误信息,仅传1个参数给自定义异常
            raise MyException(f'Balance amt is less in the account of {k}')

bank={'Raj':5000,'Vikas':10000,'Nishit':500,'John':321211}

try:
    check(bank)
except MyException as obj:
    print(obj)
运行效果

遍历到Nishit的账户时会触发异常,输出如下:

Name=Raj Balance=5000
Name=Vikas Balance=10000
Name=Nishit Balance=500
Balance amt is less in the account of Nishit

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 06:24:03