exception模块

来源:互联网 发布:手机淘宝怎么求购 编辑:程序博客网 时间:2024/06/01 09:33
== exceptions 模块 ==


``exceptions`` 模块供了标准异常的层结构. Python 启动的时候会自动导入这个模块, 
并且将加入到 ``_ _builtin_ _`` 模块中. , 般不需要手动导入这个模块. 

 1.5.2 版本时一个普通模块, 2.0 以及以版本成为内建模块. 

该模块定义了以标准异常:

- //Exception// 所有异常的基类. 强烈建议(但不必须)自定义的异常异常继承这个类. 

- //SystemExit(Exception)//  ``sys.exit`` 函数引发. 在最顶层没有被 ``try-except`` 语句捕获, 
那么解释器将直接关闭不会显跟踪返回信息. 

- //StandardError(Exception)// 所有内建异常的基类(除 //SystemExit// 外). 

- //KeyboardInterrupt(StandardError)// 在用户按 Control-C(或其他打断按键) 被引发. 可能会在使用 "捕获所有"  ``try-except`` 语句时导致奇怪的问题. 

- //ImportError(StandardError)//  Python 导入模块失败时被引发. 

- //EnvironmentError// 作为所有解释器环境引发异常的基类. (, 这些异常般不于程序 bug 引起). 

- //IOError(EnvironmentError)// 用于标记 I/O 关错误. 
 
- //OSError(EnvironmentError)// 用于标记 ``os`` 模块引起的错误. 

- //WindowsError(OSError)// 用于标记 ``os`` 模块中 Windows 关错误. 

- //NameError(StandardError)//  Python 查找全局局部名称失败时被引发. 

- //UnboundLocalError(NameError)// , 一个局部变量还没有赋值就被使用时, 会引发这个异常. 这个异常只有在2.0及的版本有; 早期版本只会引发一个普通的 //NameError// . 

- //AttributeError(StandardError)// ,  Python 寻找(赋值)给一个例属性, 方法, 模块功能或其它有效的名失败时, 会引发这个异常. 

- //SyntaxError(StandardError)// , 当解释器在编译时遇到语法错误, 这个异常就被引发. 

- (2.0 及以版本) //IndentationError(SyntaxError)// 在遇到非的缩进时被引发. 该异常只用于 2.0 及以版本, 版本会引发一个 //SyntaxError// 异常. 

- (2.0 及以版本) //TabError(IndentationError)// , 当使用 ``-tt`` 选项检查不致缩进时有可能被引发. 该异常只用于 2.0 及以版本, 版本会引发一个 //SyntaxError// 异常. 

- //TypeError(StandardError)// , 当给定类型的对象不支持一个操作时被引发. 

- //AssertionError(StandardError)//  ``assert`` 语句失败时被引发(即表达式为 false 时). 

- //LookupError(StandardError)// 作为序列字典没有包含给定索引键时所引发异常的基类. 

- //IndexError(LookupError)// , 当序列对象使用给定索引索引失败时(不存在索引对象)引发该异常.

- //KeyError(LookupError)// 当字典对象使用给定索引索引失败时(不存在索引对象)引发该异常. 

- //ArithmeticError(StandardError)// 作为学计算关异常的基类. 

- //OverflowError(ArithmeticError)// 在操作溢出时被引发(一个太大, 导致不能符合给定类型). 

- //ZeroDivisionError(ArithmeticError)// , 尝试用 0 除某时被引发. 

- //FloatingPointError(ArithmeticError)// , 当浮点操作失败时被引发. 

- //ValueError(StandardError)// , 一个参数类型确但值不合时被引发. 

- (2.0 及以版本) //UnicodeError(ValueError)// , Unicode 字符串类型关异常. 只使用在 2.0 及以版本. 

- //RuntimeError(StandardError)// , 当出现运行时问题时引发, 包括在限制模式尝试访问外部内容, 知的硬问题等等. 

- //NotImplementedError(RuntimeError)// , 用于标记实现的函数, 无效的方法. 

- //SystemError(StandardError)// , 解释器内部错误. 该异常值会包含更的细节 
(常会一些深层东西,  "``eval_code2: NULL globals" )``. 
本书的作编了 5 年程序都没见过这个错误. (想必没有用 ``raise SystemError``). 

- //MemoryError(StandardError)// , 当解释器耗尽内存时会引发该异常. 注意只有在底层内存配抱怨时这个异常才会发生; 的旧机器, 这个异常发生系统会陷入混乱的内存交换中. 


可以创建自的异常类. 只需要继承内建的 //Exception// 类(的任一个合适的类)即可, 有需要时可以再重载 ``_ _str_ _`` 方法. [Example 1-26 #eg-1-26] 使用 ``exceptions`` 模块. 

====Example 1-26. 使用 exceptions 模块====[eg-1-26]

```
File: exceptions-example-1.py

# python imports this module by itself, so the following
# line isn't really needed
# python 会自动导入该模块, 所以以不必要的
# import exceptions

class HTTPError(Exception):
    # indicates an HTTP protocol error
    def _ _init_ _(self, url, errcode, errmsg):
        self.url = url
        self.errcode = errcode
        self.errmsg = errmsg
    def _ _str_ _(self):
        return (
            "<HTTPError for %s: %s %s>" %
            (self.url, self.errcode, self.errmsg)
            )

try:
    raise HTTPError("http://www.python.org/foo", 200, "Not Found")
except HTTPError, error:
    print "url", "=>", error.url
    print "errcode", "=>", error.errcode
    print "errmsg", "=>", error.errmsg
    raise # reraise exception

*B*url => http://www.python.org/foo
errcode => 200
errmsg => Not Found
Traceback (innermost last):
  File "exceptions-example-1", line 16, in ?
HTTPError: <HTTPError for http://www.python.org/foo: 200 Not Found>*b*
```
原创粉丝点击