将shlex置于调试模式

koj*_*iro 7 python shlex

我想看看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)
Run Code Online (Sandbox Code Playgroud)

我知道Python有一些强大的元编程功能,但我无法弄清楚它是如何工作的 - 即使我覆盖了构造函数,也没有编程方法来设置值和它的使用.

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

aba*_*ert 2

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

\n\n

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

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

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

\n\n
    \n
  • 无法访问的代码是在2000 年的更改中添加的,此后唯一的更改是将其调整为 80 列。
  • \n
  • 该参数没有单元测试debug(这并不奇怪,因为它几乎没有记录,只是说“如果你想使用它,请阅读源代码”\xe2\x80\xa6\xc2\xa0,但你可能想添加无论如何)。
  • \n
\n