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的方法,还在对这个编程环境软件熟悉中,因此用的是设置断点然后单步执行程序发现了这个错误。

Share

You may also like...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注