一、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内建的全部异常类型以下