7

我想看看shlex对于我正在尝试构建的东西是否是一个不错的选择,所以我想我会把它置于调试模式来玩弄它。只是,shlex 的构造函数有一个奇怪的事情:它设置self.debug0然后立即检查它是否为真。

…
self.debug = 0
self.token = ''
self.filestack = deque()
self.source = None
if self.debug:
    print 'shlex: reading from %s, line %d' \
          % (self.instream, self.lineno)

我知道 Python 有一些强大的元编程特性,但我不知道它是如何工作的——即使我重写了构造函数,也没有编程方式可以在值的设置和它的使用之间进行切换。

是否应该有一种方法来输出if self.debug条件中的语句(如果是,如何输出?),它是一个错误,还是我没有考虑过第三种可能性?

4

1 回答 1

2

首先,我很确定你发现了一个错误,你应该去报告它。(您应该确保它仍然存在于最新的 3.x 代码中,但我刚刚检查过,它确实存在。)我没有看到任何不合理的对象在初始化之前shlex不允许您设置......但是在debug=1在这种情况下,他们不应该检查self.debug初始化程序,因为无法设置它。

但这并不是一个很难解决的错误。这样你唯一丢失的是第一条消息,它只打印出你可以自己打印的公共属性。因此,例如:

class debugging_shlex(shlex):
    def __init__(self, *args, **kwargs):
        # shlex is an old-style class in 2.7, so no super
        shlex.__init__(self, *args, **kwargs)
        self.debug = 1
        print('shlex: reading from %s, line %d' \
              % (self.instream, self.lineno))

有关错误报告的更多信息:

  • 在2000 年的更改中添加了无法访问的代码,此后唯一的更改是将其调整为 80 列。
  • debug参数没有单元测试(不足为奇,因为它几乎没有记录,只是说“如果你想使用它,请阅读源代码”......但你可能还是想添加一些)。
于 2015-05-02T00:34:24.573 回答