将 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"……但您可能还是想添加一些)。
我想看看是否 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"……但您可能还是想添加一些)。