2021年01月17日,学习Python基础教程第3版中发现的问题
折腾到了凌晨,总算发现了原书中的代码BUG。为防止过段时间又忘记了,写个短文记录一下。
涉及第20章项目1《自动添加标签》中第5小节第8段代码清单20-6,中文及英文版原始代码如下:
def parse(self, file):
self.handler.start('document')
for block in blocks(file):
for filter in self.filters:
block = filter(block, self.handler)
for rule in self.rules:
if rule.condition(block):
last = rule.action(block,
self.handler)
if last: break
self.handler.end('document')
上述代码中文版有两个错误,其中一个错误应该是排版错误,Class中的方法没有缩行,另外一个就是英文版也一样有的错误就是for语句的循环嵌套问题,应该将filter检查放在规则检查中确定Block处理程序执行过后IF语句内部,不然会造成同一Block的数据重复被输出n次,这样每一块将出现与filter规则数相同的重复。
修改后测试正确代码如下:
def parse(self, file):
self.handler.start('document')
for block in blocks(file):
for rule in self.rules:
if rule.condition(block):
last = rule.action(block, self.handler)
for filter in self.filters:
block = filter(block, self.handler)
if last: break
self.handler.end('document')
最后,记录一下使用Pycharm检查出BUG的方法,还在对这个编程环境软件熟悉中,因此用的是设置断点然后单步执行程序发现了这个错误。
