异常处理

1、捕获异常
try-except语句语法:

try:
    <可能会引发异常的语句>
except [异常类型]:
    <处理异常>
示例代码:

i = input('请输入数字:')
n = 8888
try:
    result = n / int(i)
    print('结果是:{}'.format(result))
except ZeroDivisionError as e:
    print("不能除以0,异常{}".format(e))
2、多个except代码块
语法:

try:
    <可能会引发异常的语句>
except 异常类型1:
    <处理异常>
except 异常类型2:
    <处理异常>
...
except:                  #省略异常类型的except代码块是默认的except代码块,它只能被放到最后,捕获上面没有匹配的异常类
    <处理异常>
示例代码:

i = input('请输入数字:')
n = 8888
try:
    result = n / int(i)
    print('结果是:{}'.format(result))
except ZeroDivisionError as e:
    print("不能除以0,异常{}".format(e))
except ValueError as e1:
    print("输入的是无效数字,异常:{}".format(e1))
3、多重异常捕获
示例代码:

i = input('请输入数字:')
n = 8888
try:
    result = n / int(i)
    print('结果是:{}'.format(result))
except (ZeroDivisionError, ValueError) as e:
    print("异常发生: {}".format(e))
4、使用finally代码块释放资源
语法:

try:
    <可能会引发异常的语句>
except 异常类型1:
    <处理异常>
except 异常类型2:
    <处理异常>
...
except:
    <处理异常>
finally:
    <释放资源>
示例代码:

i = input('请输入数字:')
n = 8888
try:
    result = n / int(i)
    print('结果是:{}'.format(result))
except (ZeroDivisionError, ValueError) as e:
    print("异常发生: {}".format(e))
finally:                                         #它的作用是确保即使发生了异常,程序依然能够进行一些必要的收尾操作。
    print("释放资源...")
5、自定义异常类
实现自定义异常类,需要继承Exception类或其子类,前面的例子中遇到的ZeroDivisionError和ValueError异常都属于Exception的子类

示例代码:

class ZidingyiException(Exception):
    def __init__(self, message):
        super().__init__(message) 
6、手动引发异常
以上的例子中,都是由解释器引发的,现在也可以使用raise语句手动引发异常

示例代码:

class ZidingyiException(Exception):
    def __init__(self, message):
        super().__init__(message)

i = input('请输入数字:')
n = 8888
try:
    result = n / int(i)
    print('结果是:{}'.format(result))
except ZeroDivisionError as e:
    raise ZidingyiException('不能除以0')
except ValueError as e:
    raise ZidingyiException('输入的是无效数字')

#调用父类的构造方法可确保自定义的异常类保留异常对象的基本功能,比如:存储异常消息:父类的 __init__ 方法会将传递给它的消息(如 "不能除以0")保存到 arg属中。这个属性可以通过 str(exception) 获取异常的字符串描述。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注