首页 > 代码库 > python基础学习08(核心编程第二版)部分
python基础学习08(核心编程第二版)部分
# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = ‘Administrator‘ #异常 """ NameError: 尝试访问一个未申明的变量 ZeroDivisionError: 除数为零 SyntaxError: 解释器语法错误 IndexError: 请求的索引超出序列范围 KeyError: 请求一个不存在的字典关键字 IOError: 输入/输出错误 AttributeError: 尝试访问未知的对象属性 ValueError: 值错误 TypeError: 类型错误 SystemExit: 当前python应用程序需要退出 KeyboardInterupt: 用户按下CTRL+C关闭python """ #异常处理的方法,语法如下 """ try--except基本语法 可选的else语句处理没有异常情况 try语句有两种主要形式:try-except和try-finally 一个try语句可以对应一个或多个except子句,但只能对应一个finally子句,或是一个try-except-finally复合语句 """ #try-except语句 """ try: 异常语句体 except Exception[,rsason]: 异常处理的方式
""" #例子 try: f=open(‘ax.txt‘) except IOError as s: print s #内建函数异常 print float(1) print float(-2) try: float(‘abcd‘) except ValueError as s: print s #把异常封装成一个函数 def trye(obj): try: float(obj) except ValueError as s: print s
trye(‘a‘) #带有多个except的try语句 #语法: """ try: pass except 异常1: pass except 异常2: pass . . . except 异常n: pass """ def trye1(obj): try: float(obj) except ValueError as s: print 1,s except TypeError as s1: print s1 trye1([‘a‘,‘b‘]) #处理多个异常的except语句 #语法: """ try: pass except (异常1,异常2,异常3,...异常n): pass except语句可以处理任意多个异常,前提是它们被放入一个元组里。 捕获所有异常可以使用: except (E1,[E2,[...EN]])[,REASHON]: 捕获所有异常 try: : except Exception, e: #不常用 try: ;;; except:pass """ #else子句 #在try范围中没有异常被检测到时,执行else子句。 #finally子句 """ finally子句无论异常是否发生,是否捕捉都会执行的一段代码。 无论什么语法,至少要有一个except子句,而else和finally都是可选的。""" #with语句上下文管理器 #语法如下with exp [as var]: #上下文管理协议暂时先跳过:http://blog.sina.com.cn/s/blog_76e94d210100vybf.html #raise语法 #raise [s,[,args[,traceback]] """ s表示异常类型,如果有,它必须是一个字符串,类或者实例,如果有其他参数args或者traceback,就必须提供s.python异常类型 #args(比如值,参数)来传给异常,可以是一个单独 的对象也可以是对象的元组,当触发异常时,异常的参数总是作为一个元组传入,如果args原本变是元组,那么将其传给异常去处理 ,如果args是一个单独的对象,就生成一个元素的元组(单元素元组)traceback(很少用),如果有的话,就当异常触发新生成的一个用于异常-正常化 跟踪记录对象,traceback可以区别和当前位置,如果没有这个参数,就是None """ #最常见的异常类SomeException,不需要其他参数,如果有,可以是单一对象参数,一个参数的元组或者异常的实例,如果参数是一个实例,可以由给出的类及其派生类实例化,如果参数为实例了,则不能有更多其他参数 """ raise exclass 触发一个异常,从 exclass 生成一个实例(不含任何异常参数)
raise exclass() 同上,除了现在不是类;通过函数调用操作符(function calloperator:"()")作用于类名生成一个新的exclass 实例,同样也没有异常参数
raise exclass, args 同上,但同时提供的异常参数args,可以是一个参数也可以元组
raise exclass(args) 同上
raise exclass,args, tb 同上,但提供一个追踪(traceback)对象 tb 供使用
raise exclass,instance 通过实例触发异常(通常是 exclass 的实例);如果实例是 exclass
的子类实例,那么这个新异常的类型会是子类的类型(而不是exclass);如果实例既不是 exclass 的实例也不是 exclass 子类的实例,那么会复制此实例为异常参数去生成一个新的exclass实例.
raise instance 通过实例触发异常:异常类型是实例的类型;等价于 raise
instance.__class__, instance (同上).
raise string (过时的) 触发字符串异常
raise string, args 同上,但触发伴随着 args
raise string, args, tb 同上,但提供了一个追踪(traceback)对象 tb 供使用
raise (1.5新增)重新触发前一个异常,如果之前没有异常,触发TypeError.
""" #断言assert #语法 #assert expreession[,aruments] #例子 #assert 1<0,‘aaa‘ #__debug__在通常情况为True,如果开启优化后为False(命令行选项-O) #异常与sys模块 #异常的另一种方式sys.exc_info(),它提供了3个无级 try: float(‘abcd‘) except Exception: import sys print1=sys.exc_info() print print1 for i in print1: print i #sys.exc_info()得到元组是 """ exc_type异常类 exc_value异常类实例 exc_traceback跟踪记录对象 """