将 shlex 置于调试模式

Putting shlex in debug mode

我想看看是否 shlex was a good choice for something I'm trying to build, so I thought I'd put it in debug mode to play around with it. Only, shlex's constructor has this weird thing it does:它将 self.debug 设置为 0,然后立即检查它是否为真。

…
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 条件下输出语句(如果是,如何?),这是一个错误,还是有我没有考虑过的第三种可能性?

首先,我很确定你已经发现了一个错误,你应该 go report it. (You should make sure that it's still present in the latest 3.x code,但我刚刚检查了一下,确实如此。)我没有发现 [=11= 有任何不合理之处] 对象不允许您设置 debug=1 直到它们被初始化......但在这种情况下,它们不应该在初始化程序中检查 self.debug,因为无法设置它。

但这并不是一个很难解决的错误。这种方式唯一丢失的是第一条消息,它只打印出 public 属性,您可以自己打印。所以,例如:

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))

错误报告的更多信息:

  • this 2000 change 中添加了无法访问的代码,此后唯一的变化是将其调整为 80 列。
  • debug 论点没有单元测试(这并不奇怪,因为它几乎没有记录,只是说 "if you want to use this, read the source"……但您可能还是想添加一些)。