关于自定义异常
class ApiException(Exception):
""" 我的自定义异常 """
# err_code = ''
# err_msg = ''
def __init__(self, err_code=None, err_msg=None):
"""
:param err_code:
:param err_msg:
"""
self.err_code = self.err_code if self.err_code else err_code
self.err_msg = self.err_msg if self.err_msg else err_msg
def __str__(self):
return 'Error: {0} - {1}'.format(self.err_code, self.err_msg) #__str__(self)会返回一个对象的描述信息
class InvalidCtrlExec(ApiException):
""" 当参数不合法时触发
40001 invalid credential 不合法的调用凭证
"""
err_code = '40001'
err_msg = '不合法的调用凭证'
class BadPramsException(ApiException):
""" 参数不正确 """
err_code = '40002'
err_msg = '两个参数必须都是整数'
def divide(num1, num2):
""" 除法的实现 """
# 两个数必须为整数
if not isinstance(num1, int) or not isinstance(num2, int):
raise BadPramsException()
# 除数不能为0
if num2 == 0:
raise ApiException('400000', '除数不能为0')
return num1 / num2
if __name__ == '__main__':
try:
rest = divide(5, '0')
print(rest)
except ApiException as err:
print('出错了')
print(err) #__str__(self)会返回一个对象的描述信息
# except BadPramsException as e:
# print('----------------')
# print(e)
---------------------------------------------------------------------------------------------------
老师,我i想问下:
1、我把if后面的注释掉,代码运行结果一样,我知道意思是self.err_code存在的时候self.err_code = self.err_code,不存在的时候self.err_code = err_code,此处的if判断在这里的用意是什么?
2、此处我把代码改成如下:为什么不能执行,难道不是把下面的err_code = '40002'
err_msg = '两个参数必须都是整数' 这两个值传上去吗??
self.err_code = self.err_code,self.err_msg = self.err_msg 这种写法是什么意思??
之前学类的时候都是用self.err_code = err_code,self.err_msg = err_msg!!!
正在回答
同学,你好,同学的理解是可以的。视频中的例子:类属性设置的为空字符串,如果不给self.err_code传值,self.err_code为None,则使用类属性err_code的值;如果对self.err_code进行传值则使用传入的值。
若抛出子类异常,注释了父类中的两个类属性,则使用的是子类中定义的两个类属性的值。
若注释子类中的没有注释父类中的,并且在抛出该异常时没有传递参数,则输出结果为None
如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~
同学你好:
1、提高代码的可用性。按照老师的写法,如果类初始化时没有给这两个属性赋值,则直接使用类属性值,反之使用类初始化实例属性时的属性值。
2、
self.err_code = self.err_code
self.err_msg = self.err_msg
self.err_msg 和self.err_code是类的属性,不是实例属性。
elf.err_code = err_code
self.err_msg = err_msg
中的err_code和err_msg则是实例属性,上面的过程则是对属性进行初始化。
所以输出的错误是None。
同学可以传值参考:
如果我解决了同学的问题,请采纳!学习愉快^_^。
相似问题
登录后可查看更多问答,登录/注册
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星