首页 > 代码库 > 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跟踪记录对象 """