python异常处理的作用_Python语法错误与异常及异常处理方法

回顾

在Python进阶记录之基础篇(二十)中,我们介绍了Python面向对象中的类方法和静态方法,以及类中拥有特殊功能的魔法函数。需要重点掌握类方法和静态方法的概念和基本用法,理解魔法函数的作用冰女熟练使用常用魔法函数来定制类。今天我们讲一下Python中的语法错误和异常以及对异常的处理。

语法错误

在我们刚开始学习Python时,由于不够熟悉,经常会出现一些语法错误。

4addac8df8854dcf91a6d1d9d9f9e84a

语法错误

Python中的语法错误也被称为解析错误,是初学者很容易碰到的错误。好消息是运行后Python语法分析器能准确指出出错的那一行,并且在最先找到的错误的位置标记上一个小小的箭头,从而让我们快速定位语法错误。

上述代码中,我们的if条件语句后少了个冒号,运行后看到报错,我们就能意识到错误所在,从而修正这个语法错误。

异常

有时候,虽然我们的Python程序没有语法错误,但在运行它的时候,我们会发现程序也有可能报错。这种情况下,通常是程序发生了异常。

79cd63bf3139485386d19acb73f59e04

程序异常

上述代码中,从语法角度讲,程序是没有问题的。但是可以看到,运行还是报错了,原因是我们把0当做了除数,使Python抛出了一个ZeroDivisionError的异常错误。像这种运行时被检测到的错误就叫做异常。

我们再来看另外一个例子,我们知道,Python中是不允许字符串类型和数字类型进行运算的,现在我们试图使用字符串2和整数2相加。

c95db91493a742408fea3e06a6a6e771

程序异常

如我们所料,Python再次抛出异常,并且异常错误为TypeError。事实上,与大多数编程语言类似,Python也有各种不同类型的异常,例如我们例子中的ZeroDivisionError和TypeError就是常见的两种异常,并且大多数的异常都不会直接被程序处理,而是以错误信息的形式展现在运行结果中,同时会终止程序的运行。

异常处理

与语法错误不同的是,我们可以捕捉异常。当程序发生异常的时候,我们捕捉到异常让程序暂停当前执行的代码并跳转至错误处理代码,处理结束再继续程序的运行,从而规避程序因发生异常而导致终止。

Python中通过“try...except...finally...”语句块来处理异常,基本格式如下:

try:

可能发生异常的代码

except:

处理异常的代码

finally(可省略):

无论异常是否发生都会执行的代码

现在,我们通过捕捉异常来处理之前发生异常的两个程序。

bc291110ff2b4d7698bd81b471cc7cbc

异常的简单处理

上述代码中,我们分别通过捕捉ZeroDivisionError和TypeError这两个异常顺利修复了之前报错的两个程序。

下面我们总结一下“try...except...finally...”语句块的执行方式:

1、执行try中的子句。

2、如果没有异常发生,则跳过except子句,直接执行后续代码。

3、如果在执行try子句的过程中发生了异常,那么try子句中发生异常代码的那行开始余下的代码将不再执行。如果异常的类型和except的异常名称相符,那么对应的except子句将被执行,执行完后再执行后续代码。

4、如果异常没有与任何的except匹配,那么这个异常就会被抛出,程序终止。

一个try语句可能包含多个except子句,分别来处理不同类型的异常,但最多只有一个分支会被执行。

b5bef2e41876425bab9e7ad2757461e3

一个try多个except子句

上述代码中,我们同时捕捉了ZeroDivisionError和TypeError这两个异常,这样,程序就可以同时处理0为除数或类型错误时的情况了。

对于多异常处理,你也可以写成元组的形式。

except (ZeroDivisionError, TypeError):

pass

但是这种写法如果要处理不同的异常,你需要在except子句中先判断异常类型再做相应处理。

在执行程序的过程中,我们有时也会碰到一些意想不到的异常,或者不知道异常名称,因此,我们通常会将try语句的最后一个except子句忽略异常的名称,将它作为通配符使用。

765224e9da65465692a434514ee28c81

except异常通配符

除此之外,“try...except...finally...”语句块还有一个可选的else子句,与finally子句不同的是,这个子句只会在try子句没有发生任何异常的时候执行。

ebd5027d7cd04f9d9dcf81519916eb64

else子句

上述代码中,第一段“try...except...finally...”语句块发生异常,不会走else子句,而第二段“try...except...finally...”语句块没有发生异常,因此会走else子句。

总结

以上内容介绍了Python中的语法错误和异常以及对异常的处理方法,需要重点掌握语法错误和异常的基本概念,熟练使用“try...except...finally...”语句块处理异常。感谢大家的支持与关注,欢迎一起学习交流~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值