我想看看shlex对于我正在尝试构建的东西是否是一个很好的选择,所以我想我会把它放在调试模式下来玩它.只有,shlex的构造函数有这样奇怪的事情:它设置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)
Run Code Online (Sandbox Code Playgroud)
我知道Python有一些强大的元编程功能,但我无法弄清楚它是如何工作的 - 即使我覆盖了构造函数,也没有编程方法来设置值和它的使用.
是否应该有一种方法在if self.debug条件中输出语句(如果是,如何?),它是一个错误,还是有一些我没有考虑的第三种可能性?
首先,我很确定你已经发现了一个错误,你应该去报告它。(您应该确保它仍然存在于最新的 3.x 代码中,但我刚刚检查过,确实如此。)我没有看到对象在它们之后shlex不允许您设置有任何不合理之处。debug=1重新初始化\xe2\x80\xa6\xc2\xa0,但在这种情况下,它们不应该检查self.debug初始化程序,因为无法设置它。
但这并不是一个很难解决的错误。这样你唯一丢失的是第一条消息,它只打印出你可以自己打印的公共属性。因此,例如:
\n\nclass 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))\nRun Code Online (Sandbox Code Playgroud)\n\n有关错误报告的更多信息:
\n\ndebug(这并不奇怪,因为它几乎没有记录,只是说“如果你想使用它,请阅读源代码”\xe2\x80\xa6\xc2\xa0,但你可能想添加无论如何)。