写点什么

【Python】:如何处理异常报错?

作者:翼同学
  • 2022 年 8 月 09 日
    广东
  • 本文字数:1521 字

    阅读完需:约 5 分钟

【Python】:如何处理异常报错?

1、写在前面


大家好,我是翼同学。今天 Python 笔记的内容是:


  • 异常处理


一旦 Python 脚本发生异常,程序需捕获并处理异常。


异常处理使得程序能够在处理异常后继续正常执行,不至于崩溃或终止执行。



2、什么是异常?


当 Python 无法正常处理程序时就会发生一个异常。异常是 Python 对象,表示一个错误。


当 Python 脚本发生异常时我们需要捕获处理它,否则程序会终止执行


举个例子:


>>> a = int(input())xTraceback (most recent call last):  File "<stdin>", line 1, in <module>ValueError: invalid literal for int() with base 10: 'x'
复制代码


在上述代码中,ValueError 就是一个异常,通过异常信息,我们能找到错误所在的行号。



3、如何处理异常?


在前面讲到的例子中,修改后的代码为:


>>> while True:  try:    a = int(input("请输入一个整数:"))    print("您输入的数字是:",a)    break  except ValueError:    print("您输入的不是整数!")
请输入一个整数:3.14您输入的不是整数!请输入一个整数:a您输入的不是整数!请输入一个整数:6您输入的数字是: 6
复制代码


上述程序中:


  • 在这里,有两个新的关键字:tryexcept

  • 前面讲过,当我们输入的值不是整数时,int()函数会抛出ValueError异常

  • try块中检测到ValueError异常时,就会终止 try 块后续的代码;

  • 转而执行except块的代码;

  • except ValueError:后的代码执行完毕后,程序就会继续从while语句的开始部分继续执行;

  • 需要注意的是,只要输入的不是整数,int()函数都会抛出ValueError异常,那么try:后的break语句就不会执行,程序就会一直循环;

  • 最后,当输入的值是整数,int()函数就不会抛出ValueError异常try块就能继续执行,直到碰到break语句,程序就会退出循环;



4、try 与 except


  • tryexcept语句用来检测 try 语句块中的异常,并让 except 语句捕获异常并处理异常;

4.1、用法


如果不想在发生异常后程序被迫结束,就需要在try语句块里捕获异常,并在except语句块中处理异常。


tryexcept的用法如下:



解析:


  • try中的语句块先执行。

  • 如果try语句块中的某一语句执行时发生异常Python就跳到except部分,从上到下判断抛出的异常对象是否与except后面的异常类相匹配,并执行第一个匹配该异常的except后面的语句块,异常处理完毕。

  • 如果异常发生了,但是没有找到匹配的异常类别,则执行不带任何匹配类型的except语句后面的语句块,异常处理完毕。

  • 如果try语句块的某一语句里发生了异常,却没有匹配的except子句,也没有不带匹配类型的except部分,则异常将往上被递交到上一层的try/except语句进行异常处理,或者直到将异常传递给程序的最上层,从而结束程序。

  • 如果try语句块中的任何语句在执行时没有发生异常,Python将执行else语句后的语句块。

  • 执行完except后的异常处理语句或else后面的语句块后,程序一定会执行finally后面的语句块。这里的语句块主要用来进行收尾操作,无论是否出现异常都将被执行。

  • 一个异常处理模块至少有一个try和一个except语句块,elsefinally语句块是可选的。


4.2、例子


来看一段代码:



三个测试如下:


  • 1)以正确的格式输入,则except后面的模块均不会执行,else后的模块会得到执行,finally后面的模块语句会执行。



  • 2)如果 b 的值被赋为0,则会检测到ZeroDivisionError异常对象,在except ZeroDivisionError:之后的模块会得到执行来处理该异常。异常处理完成后,执行finally后面的语句块。



  • 3)如果只输入a的值,b没有赋值,则try模块中将抛出TypeError异常。在程序的异常处理except中没有列出该类型异常的处理程序模块,则不带异常类型的except模块能够拦截该异常进行处理。异常处理结束后,finally后面的语句也会得到执行。



5、python 标准异常




6、写在最后

好了,今天的笔记就到这里,欢迎大家到评论区一起讨论。


发布于: 刚刚阅读数: 5
用户头像

翼同学

关注

还未添加个人签名 2022.08.02 加入

还未添加个人简介

评论

发布
暂无评论
【Python】:如何处理异常报错?_Python_翼同学_InfoQ写作社区