|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
异常
2 y, l! f$ x" d3 ?相比起其他一些语言,在Python中我们可以更大胆地使用异常,因为异常在Python中是非常常见的存在,比如下面这种简单的遍历:
, D: y6 E- P n/ c% M/ r. m9 l* H" V ?. `+ x
a = ['Why', 'so', 'serious', '?']
! K, C* l, ~! l" R- s/ _7 J/ E5 b9 {8 p& T, f O( N$ E
for x in a:. H. y& \: s5 D5 Y' \3 D5 J6 D: `
print(x)4 V' X- H9 n- `0 Z& ?
_6 a$ H" j" k/ l6 k
当用for进行遍历时,会对要遍历的对象调用iter()。这需要给对象创建一个迭代器用来依次返回对象中的内容。为了能成功调用iter(),该对象要么得支持迭代协议(定义__iter__()),要么得支持序列协议(定义__getitem__())。当遍历结束时,__iter__()或者__getitem__()都需要抛出一个异常。__iter__()会抛出StopIteration,而__getitem__()会抛出IndexError,于是遍历就会停止。
4 L* |- S" d) K& L T( L8 ?. _" s: e5 q) T# o7 I
在深度学习中,尤其是数据准备阶段,常常遇到IO操作。这时候遇到异常的可能性很高,采用异常处理可以保证数据处理的过程不被中断,并对有异常的情况进行记录或其他动作:
_! H- |. G F; F: @! g0 g; y5 Lfor filepath in filelist: # filelist中是文件路径的列表
0 d( g5 l( t z9 H. Y/ vtry:* E: |. ]% B- Y6 {, H/ y5 O1 i
with open(filepath, 'r') as f:5 }5 D* J$ P' ~$ L! |" F) E
# 执行数据处理的相关工作" c5 f, x5 K5 y7 j7 p0 R7 F5 w
...& ~& J/ _. E$ \3 Z% e7 G2 @- {
& B* D1 H6 k+ u" Z
print('{} is processed!'.format(filepath))1 y% G% h* Y% X
except IOError:2 K1 C* l: H2 G' X+ t6 _1 | B
print('{} with IOError!'.format(filepath))( A. \2 k6 S8 F
# 异常的相应处理3 i4 W6 l4 X2 U
... |
. {9 t/ u0 j9 q7 c( M/ x2 {% f! T |
|