• Python | 异常处理


    本文内容:

    1. 处理异常的一般方法

    2. 捕获具体异常

    3. 捕获具体异常的描述信息

    4. 构造异常的方法

    5. 嵌套异常的处理机制

    6. 自定义异常

    正文:

    1. 处理异常的一般方法

     1 try:
     2     print("'haha")  # 会执行,问题代码之前的内容会执行了
     3     print(a)  # 之前并没有定义a,肯定会出错
     4 
     5 except:
     6     print("e")
     7 
     8 """
     9 执行后会打印:
    10 'haha
    11 e
    12 """
    当在try中打开了文件或者链接资源,在finally中关闭
     1 try:
     2     f = open("180.1.txt", "w")
     3     f.read("hhhh")
     4     # f.close()
     5 
     6 except:
     7     print("写入失败")
     8 
     9 finally:
    10     # finally中的代码总会执行,无论执行try或是执行except
    11     f.close()
    12 
    13 """
    14 执行后会打印:
    15 写入失败
    16 """
    异常处理完整的语法格式

    try:
    可能引发异常现象的代码
    except:
    出现异常现象后的 处理代码
    else:
    未出现异常现象的 处理代码(try中所有代码顺利执行后,会执行)
    finally:
    整个代码块结束时会执行的代码,用作 清理(无论异常出现与否,都会执行的代码)
     1 try:
     2     f = open("180.1.txt", "w")
     3     f.read("haha")
     4 
     5 except:
     6     print("写入异常")
     7 
     8 else:
     9     print("成功写入")
    10 
    11 finally:
    12     f.close()
    13     print("程序结束")
    14 
    15 """
    16 执行程序,打印:
    17 写入异常
    18 程序结束
    19 """

    2. 捕获具体异常

     1 try:
     2     a = "hello python"
     3     print(a)
     4     print(a.index("o"))
     5     print(2/0)
     6     # open("w","r")
     7 except NameError:
     8     print("没有找到变量a")
     9 
    10 except ValueError:
    11     print("未找到被查询的内容...")
    12 
    13 except ZeroDivisionError:
    14     print("除零错误")
    15 
    16 except Exception:
    17     print("未知错误")
    18 
    19 """
    20 执行程序,打印:
    21 hello python
    22 4
    23 除零错误
    24 """

    3. 捕获具体异常的描述信息

     1 try:
     2     b = 2/0
     3 
     4 except ZeroDivisionError as error:
     5     print("错误:" + str(error))  # error 是个对象,要转化成字符串,才能和字符串执行 加 的操作
     6 
     7 """
     8 执行程序,打印:
     9 错误:division by zero
    10 """

    4. 构造异常的方法

    raise 错误的类名(错误信息)    错误信息是个参数
    [reɪz]
    1 raise ValueError("错啦错啦")
    2 
    3 """
    4 执行程序,打印:
    5 File "/xxxxx/异常出现原理.py", line 1, in <module>
    6     raise ValueError("错啦错啦")
    7 ValueError: 错啦错啦
    8 """

    再如,除零错误就是这样构造的

    1 raise ZeroDivisionError("division by zero")
    2 
    3 """
    4 执行程序,打印:
    5 File "/xxxxx/异常出现原理.py", line 1, in <module>
    6     raise ZeroDivisionError("division by zero")
    7 ZeroDivisionError: division by zero
    8 """

    5. 嵌套异常的处理机制

     1 try:
     2     try:
     3         # print(b)  # 如果先遇到本行,此try代码块中没有解决方法,则跳出,去到外层的except里。执行程序,打印:name 'b' is not defined
     4 
     5         a = 1/0  # 如果本行写在第一行,则在本个try代码块的except就能解决问题,外层的try中的代码相当与顺利执行,不会惊动外层的except,执行程序,打印:division by zero
     6     except ZeroDivisionError as error:
     7         print(error)
     8 
     9 except NameError as error:
    10     print(error)

    6. 自定义异常

    自定义异常
    class 自定义异常类名(Exception):
    pass

    主动触发异常现象
    raise 异常类对象
     1 class NameError(Exception):
     2     pass
     3 
     4 
     5 def check_name(name):
     6     if name.find("") >= 0:
     7         # print()
     8         raise NameError("名字违规了")
     9 
    10 
    11 # 调用时
    12 try:
    13     check_name("朱自")
    14 
    15 except Exception as e:
    16     print(str(e))
  • 相关阅读:
    最大子列和问题(20 分)浙大版《数据结构(第2版)》题目集
    习题2.1 简单计算器(20 分)浙大版《数据结构(第2版)》题目集
    习题2.2 数组循环左移(20 分)浙大版《数据结构(第2版)》题目集
    习题2.3 数列求和-加强版(20 分)浙大版《数据结构(第2版)》题目集
    java之不同数据流应用举例
    java之java.io.File的相关方法
    java之注解
    java之枚举和注解
    java之泛型
    java之操作集合的工具类--Collections
  • 原文地址:https://www.cnblogs.com/ykit/p/11280935.html
Copyright © 2020-2023  润新知