Volevo vedere se shlex
era una buona scelta per qualcosa che sto cercando di costruire, quindi ho pensato di metterlo in debug mode per giocare con esso. Solo, il costruttore di shlex ha questo weird thing it does: imposta self.debug
su 0
e verifica immediatamente se è vero.Mettere shlex in modalità debug
…
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)
so Python ha alcune potenti funzioni di metaprogrammazione, ma io non riesco a capire come questo è destinato a lavorare - anche se sovrascrivo il costruttore, non c'è alcun modo programmatico per ottenere tra l'impostazione del valore e della il suo uso.
Si suppone che ci sia un modo per emettere l'istruzione nella condizione if self.debug
(e se sì, come?), È un bug, o c'è qualche terza possibilità che non ho considerato?
Programmaticamente sicuramente c'è un modo: http://ideone.com/wcPVRg. Ma sembra davvero un vecchio codice [scritto nel 1999] (https://github.com/python/cpython/blob/2bdca80eb5d7757d4542e9e12e425a54a11fe300/Lib/shlex.py) e nessuno ha mai toccato quella parte. o_O –
L'ultimo era un po 'hardcoded, ecco un modo leggermente diverso: http://ideone.com/lDCKvu –
Sembra un bug. È perfettamente ragionevole per 'shlex' richiedere di impostare' s.debug = 1' solo dopo la costruzione ... ma in quel caso, non c'è una buona ragione per controllare 'self.debug' durante l'inizializzatore. – abarnert