python:异常处理

一. python标准异常处理

AssertionError断言语句(assert)失败
AttributeError尝试访问未知的对象属性
KeyError字典中查找一个不存在的关键字
OSError操作系统产生的异常(例如打开一个不存在的文件)
OverflowError数值运算超出最大限制
SyntaxErrorPython的语法错误
ZeroDivisionError除数为零
EOFError用户输入文件末尾标志EOF(Ctrl+d)
FloatingPointError浮点计算错误
GeneratorExitgenerator.close()方法被调用的时候
ImportError导入模块失败的时候
IndexError索引超出序列的范围
KeyboardInterrupt用户输入中断键(Ctrl+c)
MemoryError内存溢出(可通过删除对象释放内存)
NameError尝试访问一个不存在的变量
NotImplementedError尚未实现的方法
ReferenceError弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
RuntimeError一般的运行时错误
StopIteration迭代器没有更多的值
IndentationError缩进错误
TabErrorTab和空格混合使用
SystemErrorPython编译器系统错误
SystemExitPython编译器进程被关闭
TypeError不同类型间的无效操作
UnboundLocalError访问一个未初始化的本地变量(NameError的子类)
UnicodeError Unicode相关的错误(ValueError的子类)
ValueErro传入无效的参数

二.如何检测并处理异常

1. try – except Exception
  • 语法格式

    try:
    检测范围
    except Exception[as reason]:
    出现异常后的处理代码

  • 例:

f=open("E:\\不存在的文件.txt")
print(f.read())
f.close()

运行后报错:
Traceback (most recent call last):
  File "C:/Users/MY/AppData/Local/Programs/Python/Python37-32/xiaojiayu.py", line 1, in <module>
    f=open("E:\\不存在的文件.txt")
FileNotFoundError: [Errno 2] No such file or directory: 'E:\\不存在的文件.txt'
  • 对例子检测并处理异常:
try:
    f=open("E:\\不存在的文件.txt")
    print(f.read())
    f.close()
except OSError:
    print("文件不存在")

运行结果:
文件不存在

注意:try语句段是程序员想要检测的语句段范围,只要try语句一旦检测到异常,try语句块里剩下的语句不会被执行。

  • 例:
  try:
        sum=1+'1'  #try语句一旦检测到异常,剩下的语句不会被执行
        f = open('我为什么是一个文件.txt')
        print(f.read())
        f.close()
    except OSError as reason:
        print('文件出错了:'+str(reason))
    except TypeError as reason:
        print('类型出错了:' + str(reason))
        
运行结果:
>>> RESTART: C:/Users/MY/AppData/Local/Programs/
     Python/Python37-32/xiaojiayu.py 
 类型出错了:unsupported operand type(s) for
            +: 'int' and 'str'

可以看到,在检测到TypeError以后,try语句段不会继续执行,所以检测不到存在的OSError

  • except(xxxx,xxx….)
    可以同时捕获好几个异常
try:
    sum=1+'1'  #try语句一旦检测到异常,剩下的语句不会被执行
    f = open('我为什么是一个文件.txt')
    print(f.read())
    f.close()
except (OSError,TypeError) as reason:
    print('出错啦:'+str(reason))


2. try – except – finally

语法格式:

try:
    检测范围
except Exception  as reason:
    出现异常后的处理代码
finally:
    无论如何都会执行的代码

例:

try:
    f = open('D:\\我为什么是一个文件.txt','w')
    print(f.write('我存在了!'))
    sum=1+'1'  #try语句一旦检测到异常,剩下的语句不会被执行
except (OSError,TypeError) as reason:
    print('出错啦:'+str(reason))

finally:
    f.close()

可以看到执行写入操作后,由于typeError,try语句停止执行
然而,对于文件的关闭是写在finally里的,所以写入,并且保存在磁盘的操作实际上是成功的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值