文件与异常 Files and Exceptions: Dealing with Errors
Python中的基本输入机制是**基于行(line based)**的:当程序从文本文件中读入数据时,一次读取一行。
使用open()
BIF打开一个磁盘文件,创建一个迭代器从文件读取数据,一次读取一个数据行。
一般流程:打开—处理—关闭
例子(要看注释):
split()
方法返回一个字符串列表(list),这会赋值至一个目标标识符列表。这称为多重赋值(multiple assignment):
注意到上面的目标标识符列表是用小括号包围,而不是中括号。
Python有两种类型的列表:一种是可以改变的列表(用中括号包围),另一种一旦创建就不能改变(用小括号包围)。后者是一种不可变列表(immutable list),通常称为元组(tuple)。可以认为元组等同于列表,不过有一点区别:一旦创建,元组中的数据在任何情况下都不能改变。
如果没有冒号或者有多个冒号就会出错,比如:
Other Man: Now let's get one thing quite clear: I most definitely told you!
出错信息如下(数据不符合期望的格式时会出现ValueError):
有太多冒号,不能赋给两个变量。可以设定split的第二个参数,控制将数据行分解为多少个部分(学习使用help()
BIF):
但是如果遇见空行,或者没有冒号的又会出错:
这样有两种方法来解决:
- 添加逻辑,比如判断是否有冒号
- 异常处理程序处理运行时错误
在本场景下,使用find()
方法来添加逻辑,如下:
not
关键字将一个条件取反。
这样可以正确运行了,但是如果有其他异常呢。而且这样额外的逻辑,造成了代码碎片。
处理异常
Rather than adding extra code and logic to guard against bad things happening, Python’s exception handling mechanism lets the error occur, spots that it has happened, and then gives you an opportunity to recover.
当捕获到异常后,不想处理,可以使用pass
:
pass
语句就是Python的空语句或null语句,什么也不做。
数据无法正常访问时会出现IOError,添加额外逻辑或者使用异常处理方式哪种更好呢?
第一种使用os.path.exists(filename)
方法判断文件是否存在,第二种不判断,由异常直接处理。
Concentrate on what your code needs to do. 要重点关注你的代码需要做什么。
专注于业务需要,那些额外的逻辑虽然能保证程序正确执行,但并不是必须的,使用异常处理可以很好的避免多余的判断等。
特定指定异常
来源:oschina
链接:https://my.oschina.net/u/567775/blog/120045