异常

异常的定义

当解释器编译报错时,就是所谓的”异常“

异常的写法

  1. try:
  2. 可能发生错误的代码
  3. except:
  4. 如果出现异常执行的代码
  1. # 示例:----尝试以r的方式打开文件,如果文件不存在,则以w方式打开
  2. try:
  3. fo = open("demo.txt", "r")
  4. except:
  5. fo = open("demo.txt", "w")

捕获异常

  • 如果尝试执行的代码的异常类型与要捕获的异常类型不一致,则无法捕获异常
  • 一般**try**下方只放一行**尝试执行**的代码
    1. try:
    2. 可能发生错误的代码
    3. except 异常类型:
    4. 如果捕获到该异常类型执行的代码
    1. # 示例:
    2. try:
    3. print(num) # 未定义num
    4. except NameError: # 变量名未定义错误
    5. print("有错误")

    捕获多个指定异常

    当捕获多个异常时,把要捕获的异常类型名字,用元组的方式放到**except**
    1. try:
    2. print(1 / 0)
    3. except (NameError, ZeroDivisionError):
    4. print("error") # error

    捕获异常描述信息

    1. try:
    2. 代码
    3. except xxx as xxx:
    4. 代码
    1. try:
    2. print(1 / 0)
    3. except (NameError, ZeroDivisionError) as result: # 捕获错误描述信息到result
    4. print(result) # division by zero

    捕获所有异常

    **Exception**是所有程序异常类的父类
    1. try:
    2. print(num)
    3. except Exception as result:
    4. print(result) # name 'num' is not defined

    异常的else

    else表示的是,如果没有异常要执行的代码
    1. try:
    2. print(1) # 1
    3. except Exception as result:
    4. print(result)
    5. else:
    6. print("no error") # no error

    异常的finally

    finally表示的是,无论是否报异常,最终都要执行的代码
    1. try:
    2. fo = open("test.txt", "r")
    3. except Exception as result:
    4. fo = open("test.txt", "w")
    5. print("新建文件")
    6. else:
    7. print("正常打开文件")
    8. finally:
    9. fo.close()
    10. print("关闭文件")

    异常的传递(嵌套异常捕获)

    ```python import time

try: fo = open(“test.txt”, “r”) try: while True: content = fo.readline() if len(content) == 0: break time.sleep(1) print(content) # 每秒钟打印一行数据 except: print(“程序被中断!请重启后再试。”) # 用户主动终止时,报异常 finally: fo.close() print(“关闭文件!”) except: print(“文件打开失败!”)

  1. <a name="jEwEj"></a>
  2. # 自定义异常
  3. 在Python中,抛出自定义异常的语法是`raise`异常类对象。
  4. - **自定义异常类继承于**`**Exception**`。
  5. ```python
  6. """实现输入长度不足报异常"""
  7. defLength = 3 # 定义默认长度
  8. # 自定义异常类,继承于Exception
  9. class ShortInputError(Exception):
  10. def __init__(self, length, min_len):
  11. self.length = length # 实际长度
  12. self.min_len = min_len # 默认最小长度
  13. # 设置抛出异常的描述信息
  14. def __str__(self):
  15. return f"您输入的长度是{self.length},小于{self.min_len},请重新输入!"
  16. def main():
  17. try:
  18. pwd = input("请输入密码:")
  19. if len(pwd) <= defLength:
  20. raise ShortInputError(len(pwd), defLength) # 使用raise抛出异常
  21. except Exception as result:
  22. print(result) # 抛出异常描述信息
  23. else:
  24. print("密码输入已完成!")
  25. main()