8.3. 自定义异常类

8.3.1. 举例1

#!/usr/bin/env python
#-*- coding:utf8 -*-

#继承Exception类
class MyError(Exception):
    pass

#需要异常类有一定的提示信息,可以重载__init__和__str__两个方法
class RangeError(Exception):
    def __init__(self,value):
        self.value = value

    def __str__(self):
        return self.value


if __name__ == '__main__':
    raise RuntimeError("Range Error....!")      #调用raise 抛出异常

8.3.2. 举例2

#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/9/8 21:07
# filename: 07.自定义异常.py

class MyError(Exception):
    def __init__(self):
        pass

    def __str__(self):
        return "this is self define error"


def my_error_test():
    try:
        raise MyError()
    except MyError as e:
        print("Exception info: ", e)


my_error_test()  # Exception info:  this is self define error

8.3.3. 举例3

#自定义异常
class xError(Exception):
    def __init__(self,value):
        self.value=value
    def __str__(self):
        return repr(self.value)

#定义一个会抛出xError的方法
def call(xName):
    if xName=='牛牛':
        raise xError('严重错误!不许给牛牛打电话!:P')
    else:
        print('确定要给',repr(name),"打电话吗?")

#调用call方法
try:
    name=input("请问您要跟谁打电话?")
    call(name)
except xError as e:
    print(e.value)
    raise

8.3.4. 举例4

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys


class MyError(Exception):
    def __str__(self):
        return "I'am a self-defiend Error!!!"


def main():
    try:
        print("************* start of main() ****************")
        if len(sys.argv) == 1:
            raise MyError
        print("************* End of main() ****************")
    except MyError as e:
        print(e)


if __name__ == '__main__':
    main()


# $ python 03.py
# ************* start of main() ****************
# I'am a self-defiend Error!!!


# $ python 03.py 11
# ************* start of main() ****************
# ************* End of main() ****************