python核心编程-第十章-个人笔记

1、python中的异常案例

    1.1    NameError: 尝试访问一个未定义/未申明的变量

   

    1.2    ZeroDivisionError: 除数为0

        

    1.3    SyntaxError: 语法错误

    

    1.4    IndexError:  请求的索引超过序列范围

    

    1.5    Keyerror: 不存在的字典关键字

    python核心编程-第十章-个人笔记_第1张图片

    1.6    IOError: 输入输出错误,类似打开一个不存在的文件时会引发此类错误

    

    1.7    AttributeError: 访问未知的对象属性或方法

    

2. 检测和处理异常

    2.1  try-except 语句

        最常见的try-except语句由try块和except块构成,语法如下

try:
    try_suite      #监控这里发生的异常
except Exception[,reason]:
    except_suite    #发生指定的异常后在这里处理,执行此处代码

实例:python核心编程-第十章-个人笔记_第2张图片

   2.2  可以把多个except语句连接在一起,处理一个try语句块可能发生的多种异常。这种情况下,首先尝试 try 子句,如果没有异常就跳过所有 except 从句继续执行;否则,在多个 except 子句中查找匹配的异常执行相应语句,若找不到匹配异常,则中断执行抛出错误。

    python核心编程-第十章-个人笔记_第3张图片 

    2.3  我们还可以在一个 except 语句里处理任意多个异常,只需要把它们放进一个元组里。

    python核心编程-第十章-个人笔记_第4张图片 

    2.4  有部分错误并不是由于错误条件引起,而是由于系统原因,比如用户按下 CTRl-C 退出 python 引发的KeyboardInterupt。如果捕获所有异常,则会导致此类异常也被捕获。故 python 2.5 以后的版本推出了 BaseException 作为所有异常的父类, Exception 作为一个子类处理真正的异常。其语法介绍:  

try:
    pass
except Exception, e:
    pass        # 处理错误的条件引发的错误和异常

try:
    pass
except BaseException, e:
    pass        # 处理所有发生的错误和异常

    2.5  信用卡交易系统例子

#!/usr/bin/env python
# -*- coding:utf-8 -*-
def safe_float(obj):
    u'float() 的安全版'
    try:
        retval = float(obj)
    except (ValueError, TypeError), diag:
        retval = str(diag)
    return retval

def main():
    u'处理所有的数据'
    log = open('cardlog.txt','w')
    try:
        ccfile = open('carddata.txt', 'r')
    except IOError, e:
        log.write('no txns this month\n')
        log.close()
        return
    
    txns = ccfile.readlines()
    ccfile.close()
    total = 0.0
    log.write('account log:\n')
    
    for eachTxn in txns:
        result = safe_float(eachTxn)
        if isinstance(result, float):
            total += result
            log.write('data...processed\n')
        else:
            log.write('ignored: %s' % result)
    print '$%.2f (new balance)' % total
    log.close()
    
if __name__ == '__main__':
    main()

   注: carddata.txt 内容如下:

python核心编程-第十章-个人笔记_第5张图片

    执行后结果:

E:\code\Core Python Programming\10\Notes\eg python cardrun.py
$58.94 (new balance)

   生成的cardlog.txt内容:

    python核心编程-第十章-个人笔记_第6张图片

   2.6  try-except语句可以跟 else 从句,类似循环中 else 从句执行条件,当 try 中的语句块没有引发任何异常时,执行 else 语句。否则执行相应的 except 语句或抛出异常, else 语句被跳过。

        finally 子句则是无论异常是否发生、是否被 except 语句处理都会执行的一段代码

3.上下文管理

    3.1  with 语句

        with 语句语法如下:

with open(r'E:\Test') as f:
    for eachline in f:
        pass      # do something to f or eachline

这段代码试图打开一个文件并赋值给f。若一切正常,文件对象被赋值给f并进行下面的迭代步骤,在下面步骤完成后关闭文件;否则,无论在何时发生异常,均执行清理代码并关闭文件。

4.触发异常

    4.1  raise 语句是Python提供的一种机制,用于让程序员能够在遇到错误的输入时明确的触发异常。其用法和语法如下:python核心编程-第十章-个人笔记_第7张图片

5.断言

    断言用来测试一个表达式返回值的真假,若为真不采取任何操作,若为假则抛出 AssertionError 。语法实例如下:

>>> assert 1 == 1
>>> assert 1 == 0
Traceback (most recent call last):
  File "<stdin>", line 1, in (module)
AssertionError

6.标准异常

    Python内建的所有异常类型如下

python核心编程-第十章-个人笔记_第8张图片

python核心编程-第十章-个人笔记_第9张图片

python核心编程-第十章-个人笔记_第10张图片

你可能感兴趣的:(python核心编程-第十章-个人笔记)