python核心编程-第十章-我的笔记

一、python中的异常案例
python

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

   

    1.2    ZeroDivisionError: 除数为0安全

        

    1.3    SyntaxError: 语法错误测试

    

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

    

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

    

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

    

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

    

2. 检测和处理异常
索引

    2.1  try-except 语句utf-8

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

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

实例:

   2.2  能够把多个except语句链接在一块儿,处理一个try语句块可能发生的多种异常。这种状况下,首先尝试 try 子句,若是没有异常就跳过全部 except 从句继续执行;不然,在多个 except 子句中查找匹配的异常执行相应语句,若找不到匹配异常,则中断执行抛出错误。

     

    2.3  咱们还能够在一个 except 语句里处理任意多个异常,只须要把它们放进一个元组里。

     

    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 内容以下:

    执行后结果:

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

   生成的cardlog.txt内容:

    

   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提供的一种机制,用于让程序员可以在遇到错误的输入时明确的触发异常。其用法和语法以下:

5.断言

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

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

6.标准异常

    Python内建的全部异常类型以下

相关文章
相关标签/搜索