美文网首页python学习日记
python中的异常处理

python中的异常处理

作者: 奔跑de鳄鱼 | 来源:发表于2019-03-24 09:14 被阅读0次

    本文所记述的是一些基础知识点中平时用的比较少的方法。

    一、主动引发异常

    使用raise语句主动引发异常,例如:

    raise Exception
    

    一些常用的异常类:

    • Exception 几乎所有的异常类都是从它派生而来的
    • AttributeError 引用属性或给它赋值失败时引发
    • OSError 操作系统不能执行指定的任务(如打开文件)时引发,有多个子类
    • IndexError 使用序列中不存在的索引时引发,为LookupError的子类
    • KeyError 使用映射中不存在的键时引发,为LookupError的子类
    • NameError 找不到名称(变量)时引发
    • SyntaxError 代码不正确时引发
    • TypeError 将内置操作或函数用于类型不正确的对象时引发
    • ValueError 将内置操作或函数用于这样的对象时引发:其类型正确但包含的值不合适
    • ZeroDivisionError 在除法或求模运算的第二个参数为零时引发

    二、raise...from...

    在执行下列语句是会引发两个异常。

    try: 
         1/0 
    except ZeroDivisionError: 
         raise ValueError
    

    一个是由ZeroDivisionError引发的:

    Traceback (most recent call last): 
      File "<stdin>", line 2, in <module> 
    ZeroDivisionError: division by zero
    

    另一个是由ValueError引发的:

    Traceback (most recent call last): 
      File "<stdin>", line 4, in <module> 
    ValueError
    

    使用raise ... from ...语句可以提供自己的异常上下文,使用None将禁用except捕获的异常的上下文。

    例如以下代码:

    try: 
         1/0 
    except ZeroDivisionError: 
         raise ValueError from None 
    # 输出:
    Traceback (most recent call last): 
      File "<stdin>", line 4, in <module> 
    ValueError
    

    三、捕获多个异常

    1.使用多个except语句

    try:  
       x = int(input('Enter the first number: ')) 
       y = int(input('Enter the second number: ')) 
       print(x / y) 
    except ZeroDivisionError: 
       print("The second number can't be zero!") 
    except TypeError: 
       print("That wasn't a number, was it?")
    

    2.使用一条语句捕获多个异常

    注意:这种方法except语句后面的各类异常必须加括号。

    try:  
       x = int(input('Enter the first number: ')) 
       y = int(input('Enter the second number: ')) 
       print(x / y) 
    except (ZeroDivisionError, TypeError, NameError): 
       print('Your numbers were bogus ...') 
    

    四、获取异常信息:as e

    try:  
       x = int(input('Enter the first number: ')) 
       y = int(input('Enter the second number: ')) 
       print(x / y) 
    except (ZeroDivisionError, TypeError) as e: 
       print(e)
    

    当然,也可以使用Exception方法捕获所以的异常信息,例如:

    try:  
       x = int(input('Enter the first number: ')) 
       y = int(input('Enter the second number: ')) 
       print(x / y) 
    except Exception as e: 
       print(e) 
    

    五、else和finally

    else和finally都是紧接try...except...语句的,不同的是,else只有在异常没有被引发时才会执行,而finally无论异常是否引发,都会被执行。

    相关文章

      网友评论

        本文标题:python中的异常处理

        本文链接:https://www.haomeiwen.com/subject/dxmyvqtx.html