[Python-de] Debug-Ausgabe (was: getopt: Option hat kein oder ein Argument)
Thomas 'PointedEars' Lahn
PointedEars at web.de
Sa Dez 20 21:52:39 CET 2014
[X-Post & F'up2 de.comp.lang.python]
Sieghard Schicktanz wrote:
> Hallo Bernd,
>
> Du schriebst am Wed, 17 Dec 2014 13:17:19 +0100:
Lies und beherzige bitte <http://einklich.net/usenet/zitier>.
>> > Ist es und tut es aber. Ich benutze z.B. gerne für "transiente"
>> > Ausgaben (für Tests und zum Prüfen) vollständig ausgerückte
>> > Ausgabe-Statements (die also ab Spalte 1 stehen). Das fällt bei einem
>> > einigermaßen
> ...
>> > _Geht_ in Python _nicht_.
>>
>> debug = True
>>
>> if debug:
>> statement1
>> statement2
>
> Ok, und jetzt nochmal in einem "if" innerhalb einer dreifach
> geschachtelten Schleife, bitte.
> BTW, in einer Funktion, natürlich.
<https://en.wikipedia.org/wiki/Moving_the_goalposts>
Abgesehen davon:
In Python schreibt man das IMHO nicht so, sondern geht davon aus, dass
Funktionen vom Compiler inlined und unnötige Aufrufe wegoptimiert werden
können. Diesen Ansatz empfehle ich auch für andere Programmiersprachen –
optimal natürlich als Präprozessor-Makro. Daher stellt sich das Problem
erst gar nicht:
from sys import stderr
debug_level=2
def dmsg (*args, **kwargs):
if getattr(kwargs, 'min_level', None) is None:
kwargs['min_level'] = 1
if not hasattr(kwargs, 'file'):
kwargs['file'] = stderr
if debug_level >= kwargs['min_level']:
del kwargs['min_level']
print(*args, **kwargs)
for …:
for …:
for …:
dmsg("foo", min_level=1)
Abgesehen davon: Wer in seinem Code eine dreifach verschachtelte Schleife
*direkt* stehen hat, macht sehr wahrscheinlich etwas fhcsla. Denn er hat es
wahrscheinlich versäumt, seinen Code mittels Subroutinen (in Python und
Shell: Funktionen; in Python zusätzlich: Methoden) zu strukturieren.
--
PointedEars
Twitter: @PointedEars2
Please do not cc me. / Bitte keine Kopien per E-Mail.
Mehr Informationen über die Mailingliste python-de