|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
异常
+ [6 C5 Y' m1 L% u1 b( e+ [- `相比起其他一些语言,在Python中我们可以更大胆地使用异常,因为异常在Python中是非常常见的存在,比如下面这种简单的遍历:
( w9 h# d0 B0 n l2 k! l' {- n% Q! _/ e; B
a = ['Why', 'so', 'serious', '?']3 S" x1 D* I& l3 C
0 y' c$ A, U6 T6 i8 F( ]1 `
for x in a:) ], t7 R. [$ ^6 J
print(x)
$ r% A* v3 f6 ]( M, \" a7 Y! f9 D0 f
当用for进行遍历时,会对要遍历的对象调用iter()。这需要给对象创建一个迭代器用来依次返回对象中的内容。为了能成功调用iter(),该对象要么得支持迭代协议(定义__iter__()),要么得支持序列协议(定义__getitem__())。当遍历结束时,__iter__()或者__getitem__()都需要抛出一个异常。__iter__()会抛出StopIteration,而__getitem__()会抛出IndexError,于是遍历就会停止。
5 u4 h$ ?/ d! r+ B. T, v( ]3 s2 \ y, C4 w
在深度学习中,尤其是数据准备阶段,常常遇到IO操作。这时候遇到异常的可能性很高,采用异常处理可以保证数据处理的过程不被中断,并对有异常的情况进行记录或其他动作:
+ H& k2 h0 m1 b) u( u$ C) ~! f9 Y! wfor filepath in filelist: # filelist中是文件路径的列表
& a4 Y" G. l: Ftry:
) }0 B |6 }- P/ s: wwith open(filepath, 'r') as f:
# y3 h1 t7 L. ?2 p; S! |# 执行数据处理的相关工作
) a$ X: e3 q. ]# o0 E...
" h" N# g2 w y4 M6 B8 F; j' Q! X7 `) B+ a/ V
print('{} is processed!'.format(filepath))
S5 g z7 T' x8 w1 oexcept IOError:, u) V) Q5 o1 [$ H+ m4 X2 v
print('{} with IOError!'.format(filepath))* _6 B/ K& d) G+ s' X7 R
# 异常的相应处理3 E, o6 h" M" D
... |
6 A0 L% _- _# T$ a |
|