python的异常处理语法和大多数语言相似:

try:

try块的语句...

except exceptiontype1 as var:#使用as语句获得本次捕获到的异常的实例var

  except块语句...

except exceptiontype2 as var:

  except块语句...

except:

  except块语句...

else:

  else块语句...

finally:

  finally块语句...

执行的流程分两类:

1.try->若有异常发生->except->finally
2.try->若无异常发生->else->finally

其中try块执行了可能抛出异常的语句,except块负责处理抛出的异常,处理的尝试顺序与多个except块的编写顺序一致,当尝试发现第一个异常类型匹配的except块时就进入该块内执行该except块的语句,最后一个不指定异常类型的except:  块匹配任何类型的异常(由于所有异常都继承自Exception类所有except Exception:与不指定异常类型效果一致)。

except块至少要有一个,可以使用pass语句如

except:

  pass

表示“抓到”异常后不进行任何处理。

finally类是可选的块,如前面的流程所示,无论是否有异常抛出,只要finally块存在就会被最终执行(该块中的语句一般用于关闭打开的资源,比如在try块中打开的磁盘文件)

此外,python中提供另一种简单的写法:with...as...方式

with open('abc.txt', 'r') as f:

  f语句块....

上面的f就是打开的文件对象,而采用with..as..方式会在执行完f语句块后自动关闭打开的文件资源,而不用自己写finally语句块。

至于背后的机理,实际上面的with...as...语句在进入f语句块之前调用open对象(注意python中函数也是对象,具有__call__方法的对象都可以当函数用)

的__enter__方法,该方法的返回值赋值给as后面的f,再在执行完f语句块后调用open对象的__exit__方法,而open对象作为python的内置对象默认的__enter__方法返回文件对象而__exit__方法刚好关闭了打开的文件资源从而使我们用起来感觉像方便版的try ,finally。

了解了上面的内容后,下面定义我们自己的新的异常类(这在实际开发过程中非常有用):

class myerr(Exception):
def __init__(self,err):
Exception.__init__(self)
self.err=err
try:
raise myerr('myexception')
except myerr as var :
print(var.err)

定义自己的异常类一般都继承自Exception类,初始化时同时使用Exception类的__init__方法,此外,可以通过添加一个err属性用于存放错误信息,方便在后续的异常处理中可以根据错误信息的不同来进行不同的处理。

引发自己定义的异常的语法是raise exceptiontype(arg...),直接生成该异常类的一个实例(实例化时需要的参数自行提供)并抛出该异常

在捕获异常时使用except exceptiontype as var的语法获取异常实例var,从而可以在后续的处理中访问该异常实例的属性。

如上面代码的输出为:

myexception

 

__call__方法的对象都可以当函数用
-->

python的异常处理及异常类定义的更多相关文章

  1. java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类

    package cn.kecheng; import java.util.Scanner; /**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中 ...

  2. 课堂动手动脑验证以及自定义异常类实现对异常处理——java异常类

    异常(exception):发生在程序执行期间,表明出现了一个非法运行的情况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象.例如:数组越界和被0除. 代码验证: package test ...

  3. Python 29 异常处理, 元类

    所学内容 异常处理(常用) AttributeError ··························  试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError ··· ...

  4. python所有的标准异常类:

    异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 ...

  5. python所有的标准异常类

    异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 ...

  6. python面向对象的特点,类定义等,私有属性、公有属性、成员属性

    引子:类的对象在内存中的表示def dog(name,dog_type): def bark(d): print(d,'wang wang wang ...') data = { 'name':nam ...

  7. Python(2.7.6) 异常类的继承关系

    BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration ...

  8. (转)Python异常类的继承关系

    原文:https://blog.csdn.net/Dragonfli_Lee/article/details/52350793 https://www.cnblogs.com/Lival/p/6203 ...

  9. python的异常处理

    在所有的程序中,都会遇到异常,有些异常是代码编写的时候产生的,在前期过程中可能会直接导致程序无法运行.这一类的异常,在编写代码的时候,程序可以直接排查修改.但有些异常,是在程序运行过程中产生的,可能是 ...

随机推荐

  1. Codeforces 931 C. Laboratory Work

    http://codeforces.com/problemset/problem/931/C 题意: 给定一个数列,要求构造一个等长的数列,使得数列的平均值等于给定数列,并且使得构造出的数列中与原数列 ...

  2. expect 交互 之shell执行命令操作

    shell 执行命令操作 /usr/bin/expect -c " proc jiaohu {} { send_user expect_start expect { password { s ...

  3. HDU 4472 Count DP题

    解题报告:题目大意,给你n个球,要将这n个球从下到上按层次排列,要求同一个层次的的每一个分支的数量都必须相等,问有多少种排列的方法. 此题的一个DP题,假设现在有n个球,要将这n个球排列好,我们就必须 ...

  4. HDU 1262 寻找素数对 模拟题

    题目描述:输入一个偶数,判断这个偶数可以由哪两个差值最小的素数相加,输出这两个素数. 题目分析:模拟题,注意的是为了提高效率,在逐个进行判断时,只要从2判断到n/2就可以了,并且最好用打表法判断素数. ...

  5. Python 装饰器入门(上)

    翻译前想说的话: 这是一篇介绍python装饰器的文章,对比之前看到的类似介绍装饰器的文章,个人认为无人可出其右,文章由浅到深,由函数介绍到装饰器的高级应用,每个介绍必有例子说明.文章太长,看完原文后 ...

  6. 【CTF WEB】XSS-https://alf.nu/alert1

    XSS练习平台 https://alf.nu/alert1 Warmup 1");alert(1)// Adobe 1");alert(1)// JSON </script& ...

  7. python数据库操作 - MySQL入门【转】

    python数据库操作 - MySQL入门 python学院 2017-02-05 16:22 PyMySQL是Python中操作MySQL的模块,和之前使用的MySQLdb模块基本功能一致,PyMy ...

  8. linux 如何删除文件夹下面的文件和文件夹,只保留两个文件

    # 删除目录下那两个文件之外的所有文件 find dir/ -type f ! -name file1 -a ! -name file2 | xargs rm -f   # 删除所有空目录(非空目录不 ...

  9. java虚拟机规范(se8)——java虚拟机结构(五)

    2.10 异常 java虚拟机中的异常用Throwable类或者它的子类的实例来表示.抛出一个异常会导致立即非本地(an inmediate nolocal)的控制转移,从发生异常的地方跳到处理异常的 ...

  10. Dede更新提示DedeTag Engine Create File False的解决办法

    第一种情况:列表.频道.文章等命名规则未填写或填写错误 此种情况较为少见,因为初级用户一般不会去修改这些东西,情况可以大致分为: 命名规则未填写(即为空)解决方法:只需填好相应的规则即可,重新选择栏目 ...