`
linvar
  • 浏览: 254219 次
  • 性别: Icon_minigender_1
  • 来自: 未定
社区版块
存档分类
最新评论

python2.x学习笔记(12) -- 错误和异常

阅读更多
1. 当 Python 检测到一个错误时, 解释器就会指出当前流已经无法继续执行下去. 这时候就出现了异常.

2. 对异常的最好描述是: 它是因为程序出现了错误而在正常控制流以外采取的行为. 这个行为又分为两个阶段: 首先是引起异常发生的错误, 然后是检测(和采取可能的措施)阶段.

3. Python 内建异常           
BaseException  所有异常的基类
SystemExit      python 解释器请求退出
KeyboardInterrupt     用户中断执行(通常是输入^C)       
Exception       常规错误的基类        
StopIteration       迭代器没有更多的值          
GeneratorExit       生成器(generator)发生异常来通知退出         
SystemExit       Python 解释器请求退出        
StandardError           所有的内建标准异常的基类
ArithmeticError         所有数值计算错误的基类             
FloatingPointError       浮点计算错误
OverflowError      数值运算超出最大限制
ZeroDivisionError         除(或取模)零 (所有数据类型)           
AssertionError         断言语句失败
AttributeError         对象没有这个属性
EOFError          没有内建输入,到达 EOF 标记
EnvironmentErrord        操作系统错误的基类
IOError              输入/输出操作失败    
OSError              操作系统错误         
WindowsError          Windows 系统调用失败
ImportError         导入模块/对象失败       
KeyboardInterrupt        用户中断执行(通常是输入^C)
LookupError            无效数据查询的基类
IndexError               序列中没有没有此索引(index)
KeyError                  映射中没有这个键
MemoryError         内存溢出错误(对于 Python 解释器不是致命的)
NameError        未声明/初始化对象 (没有属性)
UnboundLocalError  访问未初始化的本地变量
ReferenceError  弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError      一般的运行时错误
NotImplementedError        尚未实现的方法
SyntaxError             Python 语法错误
IndentationError        缩进错误
TabError              Tab 和空格混用
SystemError          一般的解释器系统错误
TypeError      对类型无效的操作
ValueError      传入无效的参数            
UnicodeError           Unicode 相关的错误
UnicodeDecodeError            Unicode 解码时的错误
UnicodeEncodeError          Unicode 编码时错误

4. 检测和处理异常
  try 语句有两种主要形式: try-except 和 try-finally . 这两个语句是互斥的, 也就是说你只能使用其中的一种. 一个try语句可以对应一个或多个except子句, 但只能对应一个finally 子句, 或是一个 try-except-finally 复合语句.

5. try-except 语句
try:
     try_suite   # watch for exceptions here 监控这里的异常
except Exception[, reason]:
    except_suite    # exception-handling code 异常处理代码

在一个 except 子句里处理多个异常.
except (Exc1[, Exc2[, ... ExcN]])[, reason]:
    suite_for_exceptions_Exc1_to_ExcN

6. 捕获所有异常
如果查询异常继承的树结构, 我们会发现 Exception 是在最顶层的
try:
    #...
except Exception, e:
    # error occurred, log 'e', etc.

- BaseException
    |- KeyboardInterrupt
    |- SystemExit
    |- Exception
    |- (all other current built-in exceptions) 所有当前内建异常

7. 上下文管理
    另一个隐藏低层次的抽象的例子是 with 语句,它在 Python 2.6 中正式启用.(Python2.5 尝试性的引入了 with, 并对使用 with 作为标识符的应用程序发出这样的警告 - 在 Python 2.6 中,with将会成为关键字. 如果你想在 Python 2.5 使用 with 语句, 你必须用 from __future__ importwith_statement 来导入它.)
with open('/etc/passwd', 'r') as f:
    for eachLine in f:
        # ...do stuff with eachLine or f...

8. 触发异常
raise [SomeException [, args [, traceback]]]

9. 断言语句等价于这样的 Python 表达式,如果断言成功不采取任何措施(类似语句),否则触发AssertionError(断言错误)的异常.assert 的语法如下:
ssert expression[, arguments]
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics