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

