python异常处理

╰+哭是因爲堅強的太久メ 2022-06-10 23:23 367阅读 0赞

一、try/except语句

作用:用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。如果你不想在异常发生时结束你的程序,只需在try里捕获它。

语法

一个简单的try…except…else的语法

  1. try:
  2. <语句> # 运行别的代码
  3. except <名字>
  4. <语句> # 如果在try部分引发了’name’异常
  5. except <名字>, <数据>:
  6. <语句> # 如果引发了’name’异常,获得附加的数据
  7. else:
  8. <语句> # 如果没有异常发生

可能的结果

(1)当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)

(2)如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)

(3)如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。

综上就是说:try里语句发生异常,try和else里的语句都不会执行,except如果捕获到了异常则执行except里的语句,若没有捕获,异常会被递交到上层的try,或者程序的最上层(这样就会报错并结束程序)。try里语句正常,会执行try和else里的语句。不会执行except的语句。

(1)当使用except不带任何异常类型时,如下:

  1. try:
  2. 正常的操作
  3. except:
  4. 发生异常,执行这里的代码
  5. else:
  6. 如果没有异常执行这里的代码

这种方式也正确,但是不推荐。因为这样我们就没法通过程序识别出具体的异常信息。因为它捕获的是所有的异常

(2)except也可以同时带多种异常类型,如下:

  1. try:
  2. 正常的操作
  3. except (Exception1[, Exception2[, ...ExceptionN]]):
  4. 发生以上多个异常中的一个,执行这里的代码
  5. else:
  6. 如果没有异常执行这里的代码

(3)异常可以带上参数,可作为输出的异常信息参数,如下:

  1. try:
  2. 正常的操作
  3. except ExceptionType, Argument:
  4. 你可以在这输出Argument的值

分析:

变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收一个或者多个值。元组通常包含错误字符串,错误数字,错误位置。

例子:

  1. def test(var):
  2. try:
  3. return int(var)
  4. except ValueError, Argument:
  5. print “参数没有包含数字\n”, Argument
  6. test(“abc”)

输出结果如下:

  1. 参数没有包含数字
  2. invalid literal for int() with base 10: abc

二、try/finally语句

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

语法

  1. try:
  2. <语句>
  3. finally:
  4. <语句> # 退出try时总会执行
  5. raise

一个例子:

  1. try:
  2. fh = open(“testfile”, w”)
  3. try:
  4. fh.write(“测试异常!”)
  5. finally:
  6. print “关闭文件”
  7. fh.close()
  8. except IOError:
  9. print Error: 没有找到文件或读取文件失败”

分析

当在try块中抛出一个异常,立即执行finally块代码,finally块中的所有语句执行后,异常被再次触发,并执行except块代码。

三、raise触发异常

可以使用raise语句自己触发异常

raise语法格式如下:

raise [Exception [, args [, traceback]]]

语句中Exception是异常的类型(例如NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是None。最后一个参数可选(平时很少用到),如果存在,是跟踪异常对象。

例子:

一个异常可以是一个字符串,类或对象。python的内核提供的异常,大多数都是实例化的类。

  1. def functionName(level):
  2. if level < 1:
  3. raise Exception(“Invalid level !”, level)
  4. # 触发异常后,后面的代码就不会再执行

为了能够捕获异常,except语句必须有相同的异常来抛出类对象或者字符串。例如我们要捕获以上异常,except语句如下:

  1. try:
  2. 正常逻辑
  3. except Invalid level !”:
  4. 触发自定义异常
  5. else:
  6. 其余代码

合在一起代码如下:

  1. # 自定义函数
  2. def myFunc(level):
  3. if level < 1:
  4. raise Exception(“Invalid level !”, level)
  5. # 触发异常后,后面的代码就不会再执行
  6. try:
  7. myFunc(0)
  8. except Invalid level !”:
  9. print 1
  10. else:
  11. print 2

输出为:

  1. Traceback (most recent call last):
  2. File "test.py", line 11, in <module>
  3. myFunc(0)
  4. File "test.py", line 7, in mye
  5. raise Exception("Invalid level !", level)
  6. Exception: ('Invalid level!', 0)

发表评论

表情:
评论列表 (有 0 条评论,367人围观)

还没有评论,来说两句吧...

相关阅读

    相关 python 异常处理

    python中,至少有两种可区分的错误:语法错误(syntax error)和异常(exceptions) 目录 语法错误(syntax error) 异常(except

    相关 Python 异常处理

    python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。 异常处理: 本站Python教程会具体介绍