我想看看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)我知道Python有一些强大的元编程特性,但我不知道它是如何工作的--即使我重写了构造函数,也没有编程的方法可以在值的设置和它的使用之间实现。
是否应该有一种在if self.debug条件下输出语句的方法(如果是的话,如何输出?),它是一个bug,还是我没有考虑的第三种可能性?
发布于 2015-05-02 00:34:24
首先,我很确定您已经发现了一个bug,您应该使用去报告吧。(您应该确保它仍然存在于最新的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))有关bug报告的更多信息:
debug参数没有单元测试(这并不奇怪,因为它几乎没有文档化,只是说:“如果您想使用这个,请阅读源代码”…“但无论如何,您可能需要添加一些)。https://stackoverflow.com/questions/29996208
复制相似问题