异常处理(Python语言)

目录

一、前言

二、错误类型

三、实现方式1

四、实现方式2

五、异常抛出机制

5.1自定义异常


一、前言

程序在运行时,如果遇到错误的代码,程序就会结束执行、抛出代码异常。那么如何在程序执行遇到错误代码时,对错误的代码进行处理或者直接跳过异常继续执行后面的代码?这就需要编程语言中的异常处理机制了。

二、错误类型

错误类型如下:其实这些异常类型都是类名。

异常

导致的错误

AssertionError

当assert语句失败时引发。

AttributeError

当属性分配或引用失败时引发。

EOFError

当input()函数达到文件结束条件时引发。

FloatingPointError

当浮点运算失败时引发。

GeneratorExit

调用生成器的close()方法时引发。

ImportError

找不到导入的模块时引发。

IndexError

当序列的索引超出范围时引发。

KeyError

在字典中找不到键时引发。

KeyboardInterrupt

当用户按下中断键(Ctr1+c或delete)时引发。

MemoryError

当操作耗尽内存时引发。

NameError

在局部或全局范围内找不到变量时引发。

NotImplementedError

由抽象方法提出

OSError

当系统操作导致系统相关错误时引发。

OverflowError

当算术运算的结果太大而无法表示时引发。

ReferenceError

使用弱引用代理访问垃圾收集的引用时引发。

RuntimeError

当错误不属于任何其他类别时引发。

StopIteration

函数引发,以指示迭代器不再返回任何项。

SyntaxError

遇到语法错误时由解析器引发。

IndentationError

当缩进不正确时引发。

TabError

当缩进由不一致的制表符和空格组成时引发。

SystemError

当解释器检测到内部错误时引发。

SystemExit

由sys .exit( )函数引发。

TypeError

将函数或操作应用于类型不正确的对象时引发。

UnboundLocalError

当在函数或方法中引用局部变量,但没有将值绑定到该变量时引发。

UnicodeError

当发生与unicode相关的编码或解码错误时引发。

UnicodeEncodeError

当编码过程中发生与unicode相关的错误时引发。

UnicodeDecodeError

当解码过程中出现与unicode相关的错误时引发。

UnicodeTranslateError

翻译过程中发生与unicode相关的错误时引发。

ValueError

当函数得到类型正确但值不正确的参数时引发。

ZeroDivisionError

当除法或模运算的第二个操作数为零时引发。

三、实现方式1

try:

        可能出现语法错误的代码块

except  要捕获的错误类型 as  任意变量:

         捕获到错误执行的代码块

四、实现方式2

try:

        可能出现错误的代码块

except  Exception as 任意变量:

        捕获到任意错误类型执行的代码块

else:

        没有捕获到错误执行的代码块

finally:

        不管有没有出错都必须执行的代码块

说明:

1、try:  对可能出错的代码块进行语法异常检测

2、except:  “Exception” 指的是任意错误类型,只要try中有语法错误的代码块,则都会被except进行处理;通常在不知道try中的代码错误类型的情况下使用。可以有多个except语句、但只执行一次。

3、else:只有在try代码块中没有检测到语法错误的情况下才会执行执行,如果检测到了错误就不执行。

4、finally: 不管在try中是否捕获到代码语法错误,都必须执行。

*不需要在每个可能出错的地方都使用异常处理、只需要在合适的层次去捕获异常错误就可以了,这样可以减少写"try-except"。

 

五、异常抛出机制

程序在运行时如果碰到代码语法异常,则会在当前函数中查找相应错误类型的异常捕获即查找由except指定的错误类型;如果在当前函数中没有找到相应的异常捕获错误类型,则会将异常传递给上层的调用函数看是否能够处理;如果在函数调用的最外层还没找到相应错误捕获类型,则程序就会运行停止退出并抛出异常。

5.1自定义异常

在实际开发过程中,python内置错误异常类型可能无法满足开发者需求,因此开发者可以根据自身需求条件自定义异常类,然后抛出异常类中的处理信息;之后使用"try-except"异常检测机制来捕获开发者抛出的异常信息。

注意: 自定义异常类需继承Error或Exception父类。开发者根据错误条件使用“raise”关键字来抛出异常。

说明:

以上自定义异常中,fun_name() 函数中的raise关键字是用来抛出异常即产生异常,这个异常类型为类名。然后surprise(name,len(name))会创建一个实例对象,并自动将__str__方法中的返回值作为异常类型:"suprise"的提示信息,并返回实例对象的地址。

然后由except来捕获raise抛出的异常类(错误类型)即surprise;并将异常类创建的实例对象地址赋值给msg。这样msg和surprise(name,len(name))指向的是同一个实例对象,但直接打印msg的话是异常类的错误提示信息。

@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Orion Guan's 山月润无声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值