【Python学习】异常与处理

异常是python中进行调试判断的功能,能够帮助我们更好的进行代码编译。本篇笔记为错误和异常处理

一.异常的相关概念

Python运行中经常会出现Bug。而Bug大致属于以下三类:

  • 语法错误(SyntaxError):拼写、符号等错误;
  • 运行错误(ZeroDivisionError):未导入相关模块,打开不存在的文件,除零等情况;
  • 逻辑错误:各处看似合理,但存在逻辑漏洞,无法达成结束的概念,如死循环。

这些Bug被Python称为异常,一般是再程序运行时引发的错误。

正常的异常处理流程

当程序出现异常时,会先生成一个异常对象,再提交给解释器(抛出异常);

python解释器接受异常后,寻找有问题的代码进行处理(捕获异常);

无解决方法则系统终止。

对于异常的理解:

异常类:所有的异常都是基类Exception的成员,都定义在exceptions模块中。

当异常无法得到解决时会进行回溯,返回有问题的代码并输出错误原因。

Python异常类的层次结构:

 常见的异常类:

 抛出异常:

当我们进行异常调试时,不仅需要考解释器的自动异常抛出,还要选择自己主动抛出异常。

语句:

        raise  异常名[(异常描述)]

eg:if a<0: raise ValueError ("数值不能为负数")

也可以选择利用异常类:

        raise IndexError

此时系统会自动创建一个异常的实例对象。并进行主动抛出。

也可以直接使用异常类的对象:

        index = IndexError()

        raise index

注:通常在抛出异常时,可以在异常后增加对异常的描述以便于解决。

二.异常的处理

异常的处理类似于if elif else的形式,分批进行处理。即:

try:

        抛出异常

except  异常名称:

        捕获异常(及解决办法)

finally:

        结果

异常处理的使用方法:

 :多个excrpt语句有时会很麻烦,可以在一个except后用( )一次性包括好几个异常一起判断。(即构成一个元组)。

如果想要描述捕捉到异常时解释器的描述信息,可以使用以下语句:

except (ZeroDivisionError, ValueError) as result:
print(f" 捕捉到异常 :{result}")

但是,由于异常的种类繁多,我们不可能将所有的异常都打一遍进行判断。因此,我们可以省略对异常的描述,直接用except : 进行表达。(也可以用except Exception as result: 囊括所有异常)。

当没有捕获到异常时,就会自动执行else中的语句。

而如果无论是否出现异常,都要进行一些操作,就可以使用finally进行资源释放。

整体结构梳理:

 自定义异常:

异常普遍是由系统定义的,对于我们自己编译程序时想要进行的异常审查可能不充足,因此,我们也可以尝试自定义一个异常。

步骤:

1. 创建一个继承Exception类的子类,就是自定义异常类。

2. 当遇到自己设定的错误时,使用 raise 语句抛出自定义的异常
eg:
当想抛出自定义的异常时,需要在能触发自定义的语句下进行raise语句的使用(自定义类可以不用额外添加属性,即创建新异常直接对上述例子格式改名复制即可)。然后,在except中进行自定义异常的抛出与说明。二者是配套的,且提醒语句在except中写明即可。

三.断言处理

断言是指在代码运行过程中对一些关键值等条件的判断问题。其大致包括:代码执行前(后)必须具备的特性或不能变化的特性。

语法:

        assert  布尔表达式,<描述性字符串>

(等同于:

        if not 布尔表达式:

                raise  AssertionError(<描述性字符串>)

四.程序的基本调试方法

在程序运行前寻查Bug的过程就是调试。

对于语法、运行的错误,python解释器可以直接输出异常原因。但对于逻辑错误,一般采用断点跟踪等方法。

Spyder 代码调试:

 单条语句调试:

设置断点,运行查看是否正常运行。

函数调试:

1. 开始debug,不断地按Ctrl+F10 单行执行这个程序

2. 单行执行到 c = myTest() 这行时按 Ctrl+F11 使用 Step Into 功能

异常一般只用在程序正常运行前的调试里,在正式的代码中一般不用,所以只要知道如何进行调试即可。

END.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值