博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python核心编程-第十章-个人笔记
阅读量:6934 次
发布时间:2019-06-27

本文共 2564 字,大约阅读时间需要 8 分钟。

hot3.png

1、python中的异常案例

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

   120048_gNvf_2297516.jpg

    1.2    ZeroDivisionError: 除数为0

    120254_IcUJ_2297516.png    

    1.3    SyntaxError: 语法错误

    120420_4S8L_2297516.png

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

    120548_uzzC_2297516.png

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

    120838_cNYk_2297516.png

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

    121013_YJWC_2297516.png

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

    133020_W7oa_2297516.png

2. 检测和处理异常

    2.1  try-except 语句

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

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

实例:133955_jKFt_2297516.png

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

    142517_ruru_2297516.png 

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

    143125_44nR_2297516.png 

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

try:    passexcept Exception, e:    pass        # 处理错误的条件引发的错误和异常try:    passexcept 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 retvaldef 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 内容如下:

164342_XunK_2297516.png

    执行后结果:

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

   生成的cardlog.txt内容:

    164606_CABl_2297516.png

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

5.断言

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

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

6.标准异常

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

172454_Q2R7_2297516.jpg

172454_JTDS_2297516.png

172454_S6PW_2297516.jpg

转载于:https://my.oschina.net/u/2297516/blog/653789

你可能感兴趣的文章
object dection资源
查看>>
Swift标识符和keyword
查看>>
【树莓派】【转载】基于树莓派,制作家庭媒体中心+下载机
查看>>
spring中InitializingBean接口使用理解
查看>>
strncmp函数——比较特定长度的字符串
查看>>
EF使用Fluent API配置映射关系
查看>>
输入页制作笔记
查看>>
C#使用xpath简单爬取网站的内容
查看>>
Id选择器和Class选择器
查看>>
人本质要好,要善良,要真诚,有格局和胸怀,有能力,有眼光,能讲故事,能找到人,能搞到钱...
查看>>
linux 磁盘性能监控
查看>>
CreateJs入门必知必会
查看>>
Spark Scala语言学习系列之完成HelloWorld程序(三种方式)
查看>>
SDL2源代码分析8:视频显示总结
查看>>
JavaScript中Object的总结
查看>>
WinDbg配置和使用基础
查看>>
自制力和拖延症
查看>>
2015多校联合训练赛hdu 5301 Buildings 2015 Multi-University Training Contest 2 简单题
查看>>
第十六周项目3:max带来的冲突
查看>>
Empower Developers
查看>>