博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 异常处理
阅读量:4042 次
发布时间:2019-05-24

本文共 2534 字,大约阅读时间需要 8 分钟。

Python提供了两个非常重要的功能来处理异常和错误。由此可以使用两功能来调试python程序。

  • 异常处理
  • 断言

1、异常处理

1.1、异常概念

异常是指程序中的例外,违例,影响程序正常执行的情况。异常机制是指程序出现错误后,程序的处理方法。当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理。

如果程序执行过程中发生了异常,我们没有进行异常处理,那么程序就会中止执行下面的代码。但是如果我们进行了异常处理,程序会继续执行下面的代码。

1.2、异常定义

捕捉异常可以使用try/except语句,在try语句块中语句执行错误后,让except语句捕获异常信息并处理。
语法:

try :  
<语句>
#要执行代码的主体except
<名字>
:
<语句>
#处理try部分发生的异常except
<名字>
,
<数据>
<语句>
else :
<语句>
#如果没有发生异常执行

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

  • 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
  • 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
  • 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。

实例:

#!/usr/bin/python#coding=utf-8try :  fp = open("c:\\file.txt", 'w')  fp.write("test")except IOError :  print "文件写入失败!"else :  print "文件写入成功!"  fp.close()

except可以不带参数,表示捕获所有的异常;如果加了特定的参数,表示捕获特定的异常。except参数可以有多个,每个参数间用逗号分隔。

1.3、try-finally 语句

语法格式:

try :  
<语句>
#要执行代码的主体except
<名字>
:
<语句>
#处理try部分发生的异常except
<名字>
,
<数据>
<语句>
finally :
<语句>
#无论是否发生异常,都会执行这里当然在异常中,还可以嵌套异常。

1.4、触发异常

Python中使用关键字raise来自己触发异常。
语法格式如下:

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

语句中的Exception是异常的类型,如NameError,可选;参数args是一个异常参数值,该参数是可选的,如果不提供为“None”。最后一个参数也是可选的,实际很少用,如果存在,是跟踪异常对象。

实例:

def exceptionTest(num) :  if num < 0 :    raise Exception("Invalid num")  else :    print numexceptionTest(-12)

执行结果:

Traceback (most recent call last):  File "
", line 1, in
File "
", line 3, in exceptionTestException: Invalid num

1.5、用户自定义异常

通过创建一个新的异常类,程序员就可以命名他们自己的异常了。自定义异常需要继承Exception类,通过直接或间接的方式。
以下是RuntimeError相关的实例。实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。
在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。

class Networkerror(RuntimeError):   def __init__(self, arg):      self.args = arg

在你定义以上类后,你可以触发该异常,如下所示:

try:   raise Networkerror("Bad hostname")except Networkerror,e:   print e.args

2、断言

Python中使用assert断言是一个非常好的习惯。在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它运行时崩溃,不如在出现错误条件时就崩溃,这个时候我们就需要用到断言。

assert断言是声明其布尔值必须为真的判断,如果发生异常就说明表达式为假。可以理解assert断言语句为raise-if-not,用来测试表达式,其返回值为假,就会触发异常。如:

add.py文件内容如下:

def add(self, x, y, *d) :    result = x + y    for i in d :      result += i    return resultif __name__ == '__main__' :  assert 10 == add(1,2,3,4)

如果断言为真,不会打印任何消息,如果断言失败,就会报如下错误:

Traceback (most recent call last):  File "
", line 2, in
AssertionError

转载地址:http://mdmdi.baihongyu.com/

你可能感兴趣的文章
GEE学习笔记 七十一:【GEE之Python版教程五】Python基础编程三
查看>>
GEE学习笔记 七十二:【GEE之Python版教程六】命令行简介
查看>>
GEE学习笔记 七十三:【GEE之Python版教程七】静态展示影像和动态展示影像
查看>>
GEE学习笔记 七十五:【GEE之Python版教程九】数值
查看>>
GEE学习笔记 七十六:【GEE之Python版教程十】字典
查看>>
GEE学习笔记 七十七:GEE学习方法简介
查看>>
GEE学习笔记 七十八:干涸的洪泽湖
查看>>
GEE学习笔记 七十九:【GEE之Python版教程十一】列表
查看>>
一、windows安装Tomcat
查看>>
2012年02月21日的日记
查看>>
iSecret&nbsp;简介
查看>>
iSecret&nbsp;1.0&nbsp;正式上线啦!
查看>>
iSecret&nbsp;1.0&nbsp;销量尚可&nbsp;希望大家多…
查看>>
获取当前的内存占用&nbsp;(纯Linux底层…
查看>>
UIView的深入研究《转》
查看>>
29句最常用的英语谚语——管理…
查看>>
iSecret&nbsp;用户反馈专用
查看>>
NSDateComponents&nbsp;的基本使用以及…
查看>>
我的处女贴:&nbsp;UITableView&nbsp;reloadDa…
查看>>
Operation&nbsp;Queue(Obj-C中并发的…
查看>>