Python-Python 3.x下自定义异常抛出和接收多个值的技巧

在使用Python的时候,有时候想自己自定义异常错误,同时抛出多个参数,比如对数据库查找一个用户,如果没有找到,返回

{"errCode":"-1", "errMsg":"没有该用户!"}的Json信息,那么异常需要抛出errCode和errMsg。下面的代码解决了该问题,也就是自定义异常抛出和接收多个值的技巧:


# 自定义异常错误
class MyError(ValueError):
    ERROR=("-1", "没有该用户!")

# 抛出异常测试函数
def raiseTest():
    # 抛出异常
    raise MyError(MyError.ERROR[0], # 异常错误参数1
                  MyError.ERROR[1]) # 异常错误参数2

# 主函数
if __name__ == '__main__':
    try:
        raiseTest()
    except MyError as msg:
        print("errCode:", msg.args[0])  # 获取异常错误参数1
        print("errMsg:", msg.args[1])   # 获取异常错误参数2

调试台打印的信息如下:

errCode: -1
errMsg: 没有该用户!

Process finished with exit code 0




由于自定义异常错误是一个类,继承了ValueError,在PyCharm环境下Ctrl+鼠标左键跳转到ValueError查看,ValueError代码如下:

class ValueError(Exception):
    """ Inappropriate argument value (of correct type). """
    def __init__(self, *args, **kwargs): # real signature unknown
        pass

    @staticmethod # known case of __new__
    def __new__(*args, **kwargs): # real signature unknown
        """ Create and return a new object.  See help(type) for accurate signature. """
        pass

初始化参数是*args和**kwagrs,所以except MyError as msg之后,msg.args[0]就是raise MyError(MyError.ERROR[0], MyError.ERROR[1])的第一个参数MyError.ERROR[0], msg.args[1]为第二个参数 MyError.ERROR[1]。

你可能感兴趣的:(Python)