[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