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类的实例。