python中的异常处理

异常处理是我们在编程中经常用到,将Python中的异常处理总结如下:它与其他语言中的用法类似,又有不同。

1.异常处理:

捕捉异常可以用try/except语句

try/except语句块用来检测try语句块中的错误,从而让except语句捕捉异常并处理。

语法:

try:
<语句>#有可能出现异常的代码
except<名字>:
<语句>#捕捉名为name的异常

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

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

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

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

同一段处理语句可以处理多个异常类型,只要把他们放在一个元组里就行啦

语法:

try:
<语句>
except(Error1,Error2,Error3):
<语句>

也可以为多个异常创建对应的多个处理语句

try:
<语句>
except(name1):
<语句>
except(name2):
<语句>
except(name3):
<语句>

 2.try—finally语句

不管异常是否发生,都会执行最后的语句,如:关闭文件,释放锁,把数据库链接返回给连接池。

语法:

try:
<语句>
finally:
<语句>#退出try时总会执行

 3.raise抛出异常:

语法:

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

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

def buy_goods( count ):
    if count < 0:
        raise Exception("购买数量不能小于0!")
        # 触发异常后,后面的代码就不会再执行

 4.用户自定义异常:

通过创建一个新的异常类,程序可以命名他们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。

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

创建一个类,基类为RuntimeError

在定义以上类之后,你可以触发该异常

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

  变量e是用于创建Networkerror类的实例。

相关推荐