#pragma section-numbers off = 7-11 fileinfo.xml 异常和文件处理 = <> 本章的修订参考了某人放在项目主页上的反馈。请看到此页后在此加上自己的名字,谢谢! == 6.1 异常处理 == 1. `列举下`:在这些情况下,我们都在简单使用 Python IDE:一个错误发生了,异常被打印出来('''根据'''你的 IDE,有意地以一种刺眼的红色形式表示)<
> (./) 在这些情况下,我们都在简单'''地'''使用 Python IDE:一个错误发生了,异常被打印出来 ('''取决'''于你的 IDE,'''可能会'''有意地以一种刺眼的红色形式表示) 1. `下一段`:但是许多时候,一个异常是可以'''预计''' 的…… (./) '''预见''' 1. `例 6.1 下, Para 1`:''Would you rather get back an unusable file object '''to''' a non-existent file''?<
> 你'''希望获得一个没有用的文件对象而不是一个不存在的文件'''吧?<
> (!) 注意这里的''to'',不是表比较,而是引导''object''的定语,表指向(这样的用法很常见,eg. a pointer '''''to''''' an integer)<
> (./) 你'''该不会希望获得一个指向不存在的文件的对象吧'''? 1. `例6.2, (1)`:termios 是'''一个 UNIX 特定模块'''<
> (./) termios 是'''一个特定的 UNIX 模块''' 1. `例6.2, (2)`:……它是'''一个 Windows 特定模块'''<
> (./) 它是'''一个特定的 Windows 模块''' 1. `例6.2, (3)`:它是'''一个 Mac OS 特定模块'''<
> (./) 它是'''一个特定的 Mac OS 模块''' 1. `例6.2, (4)`:……注意''','''我们在这里做的:…… (./) 注意我们在这里'''所'''做的:…… 1. `例6.2, (5)`:一处样式错误。还请参见源文件。 1. `例6.2, (5), Line -1`:<
> ''Each of the other try...except blocks has similar else clauses to bind getpass to the appropriate function when you '''find''' an import that works.''<
> 其它每个 try...except 块有着相似的 else 子句,当我们'''找到'''一个 import 可用时,来绑定 getpass 到适合的函数。<
> (./) 其它每个 try...except 块有着相似的 else 子句,当我们'''发现'''一个 import 可用时,'''就'''绑定 getpass 到适合的函数。 == 6.2 与文件对象共事 == 1. 作名词短语的'''打开文件''' 一律改为 (./) '''被打开文件'''。 === 6.2.1 读取文件 === 1. `Para 1`:……正如下一个例子所'''显示''' 的。 (./) '''展示''' 1. `例6.4, (2)`:0 表示移动到一个绝对位置(从文件'''开始'''算起),0 表示移到一个相对位置(从当前位置算起),还有 2 表示'''对于'''文件尾的一个相对位置。<
> 0 表示移动到一个绝对位置(从文件'''起始处'''算起),1 表示移到一个相对位置(从当前位置算起),还有 2 表示'''相对于'''文件尾的位置。 1. `同上`:添加了译注,说明了“文件尾”指的是文件的结束标记,而不是最后一个字节。 1. `例6.4, (3)`:tell 方法确认了'''已经移到当前文件位置'''。<
> (!) 有必要和 例6.4, (5) 里面的用词保持一致(原文可是一致的)。<
> (./) tell 方法确认了'''当前位置已经移动了'''。 1. `例6.4, (4)`:我们本可以在这里简单地说'''一下''' {X} read(),…… === 6.2.2 关闭文件 === 1. `Para 1`:打开文件消耗系统资源,并且'''依赖于文件模式,其它程序或许不能访问它们'''。<
> (./) 打开文件消耗系统资源,并且'''其间其它程序可能无法访问它们(取决于文件模式)'''。 1. `例6.5, (1)`:……'''打开文件要消耗系统资源,并且根据文件模式,其它程序可能不能使用它们。'''……<
> %^$#`?!!原文可没有把上文重复一次啊<
> (./) 删去! 1. `例6.5, (2)`:刷新被缓冲的系统'''确实''' {X} 还未写入的输出(如果有的话),…… 1. `例6.5, (4)`:'''只是因为'''文件被关闭,并不意味着文件对象'''停止'''存在。<
> (./) 文件被关闭'''了''','''但这'''并不意味着文件对象'''不再'''存在。 === 6.2.3 处理 I/O 错误 === 1. `例6.6, (5)`:一旦文件通过 open 函数被成功地打开,我们应该绝对保证把它关闭,'''甚至由于''' seek 或 read 方法引发了一个异常。<
> (./) ……'''即使是在''' seek 或 read 方法引发了一个异常'''时'''。 1. `例6.6, (6), Line -1`:……并且处理将正常继续,从 tryexcept 块的下一行代码 {i} ^开始^。 === 6.2.4 写入文件 === 1. `Para 2, 3`:"Append" 模式将数据追加到文件尾。<
> "write" 模式将覆盖文件的原有内容。<
> (!) 有必要交代一下中文含义。<
> (./) '''追加(Append)'''模式将数据追加到文件尾。<
> '''写入(write)'''模式将覆盖文件的原有内容。 1. `例6.7, (1)`:你可以大胆地开始创建'''任何的''' {X} 新文件 test.log 或覆盖现有文件,…… 1. `例6.7, (3)`:file 是 open 的同义语。'''它用一行'''打开文件,读取内容,并打印它们。<
> (./) ……'''这一行语句'''打开文件,读取内容,并打印它们。 1. `例6.7, (5)`:……同时注意'''回车符并没包含进来'''。<
> (!) 意思不是很清晰<
> (./) 同时注意'''两行之间并没包含回车符'''。 == 6.3 for 循环 == 1. `例6.8, (2)`:for 循环可以'''在它里面有'''任意'''条数'''的代码行。<
> (!) 前者不符合中文表达习惯;“条数”和“代码行”有重复之嫌。<
> (./) for 循环可以'''包含'''任意'''数目'''的代码行。 1. `例6.8, (3)`:这就是'''为什么'''你以前没看到过 for 循环的原因:…… (!) 与后面的“原因”重复了。 (./) 删去 1. `例6.10, (3)`:使用 多变量赋值 和 list 解析,你可以使用单行语句来替换整个 for 循环。在实际的编码中是否这样做只是个人风格问题;我喜欢它是因为,'''可以使得''' {X} 将一个 dictionary 映射到一个 list,然后将 list 合并成一个字符串,这一过程显得很清晰。 1. `例6.11, (1)`:'''一旦'''我们读出文件最后 128 个字节,第 3 到 32 字节总是歌曲的名字,……<
> (./) '''只要'''我们读出文件最后 128 个字节,'''那么'''第 3 到 32 字节总是歌曲的名字,…… 1. `例6.11, (2)`:'''这个''' for 变量结构…… (./) '''这里的''' 1. `例6.11, (3)`:……,接着将 parseFunc {i} ^的返回值^ 作为值赋值给伪字典 self 中的键字 tag。<
> (!) 根据上下文来看,这里指的是返回值。 == 6.4 使用 sys.modules == 1. `例6.12, (1)`:'''这个''' {X} sys 模块包含了系统级的信息,…… 1. `例6.14, (1)`:每个 python 类 {i} ^都^ 拥有一个内置的 类属性 `__module__`,…… 1. `例6.15, (3)`:hasattr 是一个补充性的函数,用来检查'''是否一个对象具有'''一个特别的属性;……<
> (./) 用来检查'''一个对象是否具有'''一个特定的属性…… == 6.5 与 Directory 共事 == 1. `例6.16, (2)`:ospath 的 join 函数'''用'''一个或多个部分路径名'''构造'''成一个路径名。<
> (./) ospath 的 join 函数'''把'''一个或多个部分路径名'''连接'''成一个路径名。 1. `例6.16, (3)`:当'''我''' {X} 发现这一点时我高兴极了,…… 1. `例6.16, (5)`:将这些技术'''合''' 在一起,…… (./) '''组合''' 1. `例6.18, (1)`:listdir 函数接收一个路径名,'''它'''返回那个目录的内容的'''一个''' list。<
> (./) listdir 函数接收一个路径名,'''并'''返回那个目录的内容的 list。 1. `例6.18, (3)`:在这里,我们使用 ospath.join 来'''确保'''一个全路径名,但 isfile 对'''一个相对于当前工作目录的部分路径'''也是有效的。你可以使用 os.getcwd() 来得到'''当前的工作目录'''。<
> (./) 在这里,我们使用 ospath.join 来'''确保得到'''一个全路径名,但 isfile 对'''部分路径(相对于当前目录)'''也是有效的。你可以使用 os.getcwd() 来得到'''当前目录'''。 1. `例6.19, (4)`:我们查看'''是否扩展名在'''我们关心的文件扩展名 list 中…… <
> (./) 我们查看'''扩展名是否在'''我们关心的文件扩展名 list 中…… 1. `例6.19下, 提示`:只要有可能,你应该使用在 os 和 ospath 中的函数进行文件''','''目录''','''和路径的操作。<
> (./) 只要有可能,你'''就'''应该使用在 os 和 ospath 中的函数进行文件、目录和路径的操作。 1. `例6.20上`:还有一种获得''' directory ''' 内容的方法。 (./) '''目录''' 1. `例6.20, 标题`:'''Listing Directories with glob''' (./) 使用 glob 列出目录 1. `例6.20, (1)`:正如你前面看到的,os.listdir 简单地'''取出'''一个目录路径,目录中的所有文件和子目录。<
> (./) 正如你前面看到的,os.listdir 简单地'''取'''一个目录路径,'''返回'''目录中的所有文件和子目录。 1. `例6.20, (2)`:glob 模块,另一方面,'''选取''' 一个通配符…… (./) '''接受''' 1. `例6.20, (4)`:'''你可以用'''两个通配符仅仅调用 glob 一次立刻获得所有这些文件的一个 list。<
> (./) '''使用'''两个通配符''','''仅仅调用 glob 一次'''就可以'''立刻获得所有这些文件的一个 list。 == 6.6 全部放在一起 == 1. `例6.21, (1)`:listdirectory 是整个模块主要的'''引吸''' 之处。 (./) '''有趣''' 1. `例6.21, (2)`:……这行代码得到一个全路径名的列表,'''它们''' 是在 directory 中…… (./) '''它的元素''' 1. `例6.21, (6)`:接着我们创建这个类(不管它是什么)的一个实例,传入文件名(又是 f)给'''的''' {X} init 方法。 1. `Para -1`:请注意 listdirectory 完全是通用的。它事先不知道将得到'''文件哪种类型''','''或者'''哪些定义好的类能够处理这些文件。<
> (./) ……它事先不知道将得到'''哪种类型的文件''','''也不知道'''哪些定义好的类能够处理这些文件。 == 6.7 小结 == 1. `Para -1`:'''动态地 实例化未知类型的类 通过将类看成对象并传入参数''' <
> (./) '''通过将类看成对象并传入参数,动态地 实例化未知类型的类''' == 6.-1 反馈 ==