Python 异常处理

2021/8/31 8:06:06

本文主要是介绍Python 异常处理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

异常

在Python程序开发中,经常会遇到两种错误,一种是语法错误,是指程序未按照语法规范进行编写,进而不能正常运行;另外一种是异常,是指在符合语法规范的前提下,程序由于逻辑错误或其他原因导致的错误,故也被称之为运行时错误。

在Python中,如果我们没有事先对有可能出现异常进行捕获处理,程序运行中遇到异常就会终止执行,会以Traceback错误提示信息的形式展示出来,以便我们找到异常出现的原因,例如:

a = 20 / 0

print(a)


Traceback (most recent call last):

  File "C:\Users\Dell\PycharmProjects\py_example\exceptiondemo.py", line 1, in <module>

    a = 20 / 0

ZeroDivisionError: division by zero


错误提示信息会显示异常发生的具体位置及异常的类型,例如上面提示我们异常发生在exceptiondemo.py文件第1行a = 20 / 0代码,异常为ZeroDivisionError,表示除数为0的异常。

处理异常

except语句捕获异常信息并处理

在Python中,使用try...excepttry...except...else.....finally语句来捕获和处理异常。

  • try语句用来检测语句块中有没有异常;

  • except语句捕获异常信息并处理;

  • else语句,在try语句块内没有异常的情况下执行;

  • finally语句无论try语句内是否有异常,都要执行。

执行逻辑为:

  • 首先,执行try语句块。

  • 如果try语句块内没有异常发生,则跳过except语句,执行else语句(在else语句有的情况下)。

  • 如果try语句块内发生了异常,则跳过发生异常处下面的代码,来到except语句,如果异常的类型和except接收的异常类型匹配,则执行except语句块;如果不匹配,则该异常会被传递到上一层try语句,如果最终没找处理程序,程序就会停止运行,并向我们打印Traceback错误提示信息。

  • 最后,无论try语句内是否有异常,finally语句都要执行(在finally语句有的情况下)。

例如:

def func(a, b):

    try:

        result = a / b

        print("result = a / b执行完毕")

    except ZeroDivisionError as e:

        print("{}/{}发生异常:{}".format(a, b, str(e)))

    else:

        print("{}/{}执行结果result为:{}".format(a, b, result))

    finally:

        print("finally程序结束")



func(20, 4)

func(20, 0)

func(20, "b")


执行结果如下:

http://img1.sycdn.imooc.com/612ccea00001ae1109120379.jpg

raise语句

Python中的raise关键字用于手动引发一个异常,可以理解为Java中的throw关键字。例如:

def raise_exception():

    raise Exception("这是一个异常")


raise_exception()

执行结果如下:http://img1.sycdn.imooc.com/612ccebb000179a309700210.jpg

此处,raise关键字后面是抛出是一个通用的异常类型Exception,一般来说抛出的异常越详细越好。

自定义异常

除了使用Python内置的异常,我们还可以自定义自己的特殊类型的异常,只需要创建一个类,并继承Exception类或其子类即可。例如:

class MyException(Exception):

    # 自定义异常,继承自异常类

    def __init__(self, name, reason):

        self.name = name

        self.reason = reason



try:

    age = -3

    if age < 0:

        raise MyException("ValueException", "age 小于 0")

except MyException as e:

    print(e.name + ":" + e.reason)

   

# 执行结果为 ValueException:age 小于 0


上面我们创建了一个异常MyException继承自Exception,用于在异常触发时输出更多的信息。定义好之后就可以在except语句后使用MyException异常。也可以通过raise语句手动触发这个异常。

总结

Python所有的异常类都是从BaseException类派生的,详细的错误类型和继承关系:Exception hierarchy。通过对异常的处理,可以提高程序的容错性与健壮性,有效的控制程序故障停止运行的发生。


作者:tigeriaf
链接:https://juejin.cn/post/7001776230055804941
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。




这篇关于Python 异常处理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程