python异常处理&异常基类学习

python异常处理&异常基类学习

一、内置异常基类汇总

转载自:https://www.cnblogs.com/nmb-musen/p/10856023.html

BaseException             所有异常的基类         
 +-- SystemExit              解释器请求退出
 +-- KeyboardInterrupt          用户中断执行(通常是输入^C)
 +-- GeneratorExit            生成器(generator)发生异常来通知退出
 +-- Exception               常规错误的基类
      +-- StopIteration              迭代器没有更多值 
      +-- StopAsyncIteration              必须通过异步迭代器对象的__anext__()方法引发以停止迭代
      +-- ArithmeticError                 所有数值计算错误的基类
      |    +-- FloatingPointError             浮点计算错误
      |    +-- OverflowError                  数值运算超出最大限制
      |    +-- ZeroDivisionError              除(或取模)零 (所有数据类型
      +-- AssertionError                  断言语句失败
      +-- AttributeError                  对象没有这个属性
      +-- BufferError                    与缓冲区相关的操作时引发
      +-- EOFError                        没有内建输入,到达EOF 标记
      +-- ImportError                     导入失败
      |    +-- ModuleNotFoundError        找不到模块
      +-- LookupError                     无效数据查询的基类
      |    +-- IndexError                      序列中没有此索引(index)
      |    +-- KeyError                        映射中没有这个键
      +-- MemoryError                     内存溢出错误
      +-- NameError                       未声明、初始化对象
      |    +-- UnboundLocalError              访问未初始化的本地变量
      +-- OSError                         操作系统错误,
      |    +-- BlockingIOError               操作将阻塞对象设置为非阻塞操作
      |    +-- ChildProcessError             子进程上的操作失败
      |    +-- ConnectionError               与连接相关的异常的基类
      |    |    +-- BrokenPipeError             在已关闭写入的套接字上写入
      |    |    +-- ConnectionAbortedError      连接尝试被对等方中止
      |    |    +-- ConnectionRefusedError      连接尝试被对等方拒绝
      |    |    +-- ConnectionResetError        连接由对等方重置
      |    +-- FileExistsError               创建已存在的文件或目录
      |    +-- FileNotFoundError             请求不存在的文件或目录
      |    +-- InterruptedError              系统调用被输入信号中断
      |    +-- IsADirectoryError             在目录上请求文件操作
      |    +-- NotADirectoryError            在不是目录的事物上请求目录操作
      |    +-- PermissionError              在没有访问权限的情况下运行操作
      |    +-- ProcessLookupError            进程不存在
      |    +-- TimeoutError                  系统函数在系统级别超时
      +-- ReferenceError                弱引用试图访问已经垃圾回收了的对象
      +-- RuntimeError                  一般的运行时错误
      |    +-- NotImplementedError      尚未实现的方法
      |    +-- RecursionError           解释器检测到超出最大递归深度
      +-- SyntaxError                   Python 语法错误
      |    +-- IndentationError         缩进错误
      |         +-- TabError          Tab 和空格混用
      +-- SystemError              一般的解释器系统错误
      +-- TypeError               对类型无效的操作
      +-- ValueError              传入无效的参数
      |    +-- UnicodeError             Unicode 相关的错误
      |         +-- UnicodeDecodeError     Unicode 解码时的错误
      |         +-- UnicodeEncodeError     Unicode 编码时错误
      |         +-- UnicodeTranslateError  Unicode 转换时错误
      +-- Warning                       警告的基类
           +-- DeprecationWarning          关于被弃用的特征的警告
           +-- PendingDeprecationWarning   关于构造将来语义会有改变的警告
           +-- RuntimeWarning           可疑的运行行为的警告
           +-- SyntaxWarning            可疑的语法的警告
           +-- UserWarning              用户代码生成的警告
           +-- FutureWarning            有关已弃用功能的警告的基类
           +-- ImportWarning            模块导入时可能出错的警告的基类
           +-- UnicodeWarning           与Unicode相关的警告的基类
           +-- BytesWarning             bytes和bytearray相关的警告的基类
           +-- ResourceWarning           与资源使用相关的警告的基类。。

 

二、常见异常

 

三、异常捕获

1.异常和捕获

  • try:监测有可能出现异常的代码
  • except:捕获异常,对异常进行处理
  • else:没有发送异常的处理方式,放在else中
  • finally:不管代码是否发生异常都会执行

2.使用方法:

try:
    try下面是有可能出现异常的代码
except:
    except下面放捕获异常之后处理的代码
else:
    else代码放没有发现异常,会执行else代码
finally:
    finally:不管代码是否发生异常都会执行

3.应用

3.1.打开文件时,文件有可能不存在

try:
    with open("yyt.txt", "r", encoding="utf8") as f:
        content=f.read()
except:
    print("捕获到异常之后的处理方式")
    with open("yyt.txt", "w", encoding="utf8") as f:
        pass

else:
    print("代码没有出现异常处理的方式,可以写内容")
    print(content)

finally:
    print("无论代码是否出现异常都会执行")
print("--------1--------")

3.2用户输入的数据没办法控制,有可能出现异常

try:
    num=int(input("请输入数字"))
except:
    print("输入不符合规则,请输入正常的数据")
else:
    if num>8:
        print("数字大于8")

 

四、指定捕获异常类型

如果要捕获多个异常类型:

    方式一:使用多个except,每个except都可以指定捕获的异常类型,适合不同类型的异常作不同的处理

    方式二:使用一个except捕获多个类型的异常,适用多个类型的异常采用相同的处理方式

         except (NameError,FileNotFoundError,KeyError) as e:

    方式三:捕获所有的异常类型:(语法错误除外),像一些第三方模块中自定义的异常,就可以使用该方式进行捕获

 

例子:

方法2例子

try:
    print(a)
except Exception as e:
    print("捕获到了异常") 

方法1例子

ry:
    print(a)
    f=open()

except (NameError,FileNotFoundError,KeyError) as e:
    print("代码异常")
    print("异常信息:", e)

except NameError as e:
    print("代码异常")
    print("异常信息:",e)

except FileNotFoundError as e:
    print("代码异常")
    print("异常信息:", e)
else:
    print("无异常")
finally:
    print("代码是否有异常均会执行")

 

五、实战一波

1.实现一个文件复制器函数

通过给函数传入一个路径,复制该路径下面所有的文件(目录不用复制)到当前目录,

要求:如果传路径不存在,不能报错 提示:os模块结合文件读写操作 、异常捕获 即可实现

import os
try:
    file_name="users.txt"
    with open(file_name,"r",encoding="utf8") as f:
        content = f.read()
except:
    print("传入的路径不正确")
else:
    s=os.listdir(r"D:\python\test")
    print(s)
    for i in s:
        print(i)
        m=os.path.join("D:\\python\\test",i)
        print(m)

        with open(m,"w",encoding="utf8") as a:
            content="1111"
            a.write(content)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,异常处理是一种用于捕获和处理程序中可能出现的错误或异常情况的机制。可以使用try-except语句来处理异常。 以下是一个处理异常的示例代码: ```python try: # 可能会发生异常的代码 result = 10 / 0 # 除数为0,会引发ZeroDivisionError异常 except ZeroDivisionError: # 处理ZeroDivisionError异常的代码 print("除数不能为0") ``` 在上述示例中,try块中的代码可能会引发`ZeroDivisionError`异常,这是因为我们试图将一个数除以0。如果发生这种情况,程序将跳转到except块,并执行其中的代码。 除了捕获指定类型的异常外,还可以使用`except`语句捕获所有异常,并在处理时提供通用的错误消息。下面是一个捕获所有异常的示例: ```python try: # 可能会发生异常的代码 result = 10 / 0 # 除数为0,会引发ZeroDivisionError异常 except Exception as e: # 处理所有异常的代码 print("发生了一个错误:", e) ``` 上述代码中的`Exception`是所有内置异常类的基类,因此它可以捕获任何类型的异常。使用`as`关键字可以将异常对象赋值给一个变量,以便在处理代码块中使用。 除了`try-except`语句之外,还可以使用`try-finally`语句来确保无论是否发生异常,某些代码都会得到执行。`finally`块中的代码在异常处理完成后始终会被执行。 ```python try: # 可能会发生异常的代码 result = 10 / 0 # 除数为0,会引发ZeroDivisionError异常 except ZeroDivisionError: # 处理ZeroDivisionError异常的代码 print("除数不能为0") finally: # 无论是否发生异常,都会执行的代码 print("程序执行完毕") ``` 上述代码中,无论是否发生异常,最终都会打印"程序执行完毕"。 这只是异常处理的基本概念,Python还提供了其他更高级的异常处理技术,例如使用`else`子句来指定在没有发生异常时需要执行的代码。你可以根据具体需求来选择合适的异常处理方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值