python学习笔记(六)异常处理

本文介绍了Python中的异常处理机制,包括异常的类型、如何引发异常、处理异常的方式如try/except、try/except...else、try-finally语句,以及用户自定义异常和异常的继承架构。异常处理使得代码更加健壮,提高了程序的可读性和错误处理效率。
摘要由CSDN通过智能技术生成

 

目录

(一)了解异常

0)Python异常的类型

1)引发异常

raise语句

assert语句

(二)处理异常

1)try/except

2)try/except...else

3)try-finally 语句

4)用户自定义异常

5)异常的继承架构

6)用到with关键字的上下文管理器


 

异常,是一种语言特性,专门用于处理程序执行期间的不正常情况。任何程序都可能在运行时遭遇错误,异常的最常见用途就是处理程序执行期间出现的错误,但也可以有效用于很多其他目的。Python提供的异常已经很全了,用户还可以根据自己的目的定义新的“异常”。

Python 有两种错误很容易辨认:语法错误和异常。

 

(一)了解异常

 

为了说明异常的概念,请考虑字处理程序会有把文件写入磁盘的情况,但有可能数据尚未写完就把磁盘空间耗尽了。解决这个问题的方法有很多。

处理磁盘空间问题的最简单方案,就是假定写入任何文件都会有充足的磁盘空间,根本不用去操心。遗憾的是,这几乎之最常用的方案 。对处理少量数据的小型程序而言,一般还说得过去。但对于运行关键任务的程序来说,这是完全不能接受的。

可以不做处理;比不做处理高明一步的错误处理方案,是意识到错误可能会发生,并利用语言提供的标准机制来定义一种检测和处理错误的方案。实现的方式有很多种,典型的方式是让每个函数或过程都返回状态值,标识出这次函数或过程调用是否执行成功。执行成功的结果值,可以通过引用类型的参数回传。

以上这种方式的程序中,绝大部分的错误检查代码显然都是重复的。代码对每次文件写入错误都要进行检查,并在检测到错误时将错误状态消息回传给发起调用的过程。磁盘空间错误仅在最外层的函数中进行处理。也就是说,大部分错误处理代码只是“管道”(plumb)代码,用于将引发错误的地方和处理错误的地方打通。

但是真正要做的事情其实是要去掉管道代码,把由系统内置的文件写入函数生成的错误直接传到错误处理函数,交由错误处理代码直接处理。因此,异常机制可以让代码更加清晰,错误处理得更加到位。

总体而言,Python对待错误处理的方式与Java等语言的常见方式不同。那些语言往往是在错误发生之前就尽可能地检查出来,因为在错误发生后再来做处理,往往要付出各种高昂地成本。而Python可能更依赖于“异常”,在错误发生之后再做处理。虽然这种依赖看起来可能会有风险,但如果“异常”能使用得当,代码会更加轻巧,可读性也更好,只有发生错误时才会进行处理。

产生异常的动作被称为引发(raise)或抛出(throw)异常。异常可以由其他函数引发,或者由自己的代码显式引发。

响应异常的动作被称为捕获(catch)异常,处理异常的代码则称为异常处理代码或异常处理程序。

0)Python异常的类型

为了能够正确反映引发错误的实际原因,或者需要报告的异常情况,可以生成各种不同类型的异常对象。Python3.6提供的异常对象有很多类型:

BaseException                                       #所有异常的基类
    SystemExit                                      #解释器请求退出
    KeyboardInterrupt
    GeneratorExit
    Exception
        StopIteration
        ArithmeticError
            FloatingPointError
            OverflowError
            ZeroDivisionError
        AssertionError
        AttributeError
        BufferError
        EOFError
        ImportError
            ModuleNotFoundError
            LookupError
                IndexError
                KeyError
            MemoryError
            NameError
                UnboundLocalError
            OSError
                BlockingIOError
                ChildProcessError
                ConnectionError
                    BrokenPipeError
                    ConnectionAbortedError
                    ConnectionRefusedError
                    ConnectionResetError
                FileExistsError
                FileNotFoundError
                InterruptedError
                IsADirectoryError
                NotADirectoryError
                PermissionError
                ProcessLookupError
                TimeoutError
            ReferenceError
            RuntimeError
                NotImplementedError
                RecursionError
            SystemError
            TypeError
            ValueError
                UnicodeError
                    UnicodeDecodeError
                    UnicodeEncodeError
                    UnicodeTranslateError
            Warning
                DeprecationWarning
                PendingDeprecationWarning
                RuntimeWarning
                SyntaxWarning
                UserWarning
                FutureWarning
                ImportWarning
                UnicodeWarning
                BytesWarning
                ResourceWarning

Python的异常第项是按层级构建的,上述异常列表中的缩进关系正说明了这一点。每种异常都是一种Python类,继承自父异常类。

例如,IndexError也是LookupErroor类和Exception࿰

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值