Я хотел посмотреть, был ли shlex
хорошим выбором для чего-то, что я пытаюсь построить, поэтому я подумал, что поместил его в debug mode, чтобы поиграть с ним. Только конструктор shlex имеет этот weird thing it does: он устанавливает self.debug
в 0
, а затем сразу же проверяет, правда ли это.Ввод shlex в режим отладки
…
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
(и если да, то как?), Это ошибка, или есть ли какая-то третья возможность, которую я не рассматривал?
Программно, конечно, есть способ: http://ideone.com/wcPVRg. Но это похоже на действительно старый код, написанный в 1999 году (https://github.com/python/cpython/blob/2bdca80eb5d7757d4542e9e12e425a54a11fe300/Lib/shlex.py), и никто не затронул эту часть вообще. o_O –
Последний бит был жестко закодирован, вот несколько по-другому: http://ideone.com/lDCKvu –
Это похоже на ошибку. Для 'shlex' вполне разумно потребовать, чтобы вы установили' s.debug = 1' только после построения ... но в этом случае нет веской причины для проверки 'self.debug' во время инициализатора. – abarnert