Seite 1 von 1

isinstalled()

Verfasst: Samstag 14. November 2009, 21:48
von stuhlbein
Ne art erweitertes "whereis". Hier gehts zum Code.
Die main() funktion soll als beispiel dienen.

Verfasst: Samstag 14. November 2009, 22:27
von BlackJack
@stuhlbein: Was soll denn dieses ``if spam and len(spam) > 0:`` dauernd bei den Zeichenketten? Wenn eine Zeichenkette nicht leer ist, dann stimmen immer *beide* Teilbedingungen, das ist also unnötig kompliziert. ``if spam:`` reicht völlig aus. Nichtleere Listen sind übrigens auch "wahr".

Funktionen sollten immer den selben (duck) Typ zurückgeben und nicht mal Tupel und mal einen Wahrheitswert. Für "Fehlerwerte" wurden Ausnahmen erfunden.

Warum splittest Du an '\040'? Weils cool ist ein Leerzeichen möglichst unintuitiv auszudrücken? Warum überhaupt ein Argument an der Stelle? Damit handelt man sich die leeren Zeichenketten erst ein, die Du danach in vielen Zeilen wieder ausfilterst.

Zeile 54 sollte überflüssig sein, es sei denn Du vertraust dem Quelltext in `isinstalled()` nicht.

Verfasst: Samstag 14. November 2009, 22:57
von stuhlbein
BlackJack hat geschrieben:@stuhlbein: Was soll denn dieses ``if spam and len(spam) > 0:`` dauernd bei den Zeichenketten? Wenn eine Zeichenkette nicht leer ist, dann stimmen immer *beide* Teilbedingungen, das ist also unnötig kompliziert. ``if spam:`` reicht völlig aus. Nichtleere Listen sind übrigens auch "wahr".
Korrigiert.
Funktionen sollten immer den selben (duck) Typ zurückgeben und nicht mal Tupel und mal einen Wahrheitswert. Für "Fehlerwerte" wurden Ausnahmen erfunden.
Ditto.
Warum splittest Du an '\040'? Weils cool ist ein Leerzeichen möglichst unintuitiv auszudrücken? Warum überhaupt ein Argument an der Stelle? Damit handelt man sich die leeren Zeichenketten erst ein, die Du danach in vielen Zeilen wieder ausfilterst.
Weil ich lesbarkeit geil finde. Je nach editor __kann__ ein einzelnes Leerzeichen wie zwei oder drei leerzeichen aussehen. Mit einem einfachen "\040" kann sowas nicht Passieren. Wenn dir diese kleine unwichtigkeit aber so sehr missfällt, steht es dir frei ein einfaches Leerzeichen reinzumachen.
Zeile 54 sollte überflüssig sein, es sei denn Du vertraust dem Quelltext in `isinstalled()` nicht.
Es ist auch nicht mein Job leute auf kaputte Betriebssysteme hinzuweisen, weshalb ich es auch "korrigert" habe.

Verfasst: Sonntag 15. November 2009, 05:26
von BlackJack
@stuhlbein: Wenn man im Editor nicht erkennen kann, ob es sich um ein, zwei, oder gar mehr Leerzeichen handelt, und ihn auch nicht so einstellen kann, dass man das eindeutig sehen kann, dann ist das ein Problem mit dem Editor. Auf jeden Fall sind Oktalzahlen an sich schon sehr ungewöhnlich.

Den letzten Kommentar habe ich nicht verstanden!? `apt` sollte keine leeren Zeichenketten in der Dateiliste liefern, und bei der Alternative filterst Du das explizit raus bevor Du es zurück gibst, warum also *nochmal* der Test? Und falls so etwas wirklich vorkommen kann, sollte es mindestens im Kommentar der Funktion stehen, damit rechnet man normalerweise nämlich nicht, oder es sollte halt auch im `apt`-Fall schon in der Funktion herausgefiltert werden.

Das Ausfiltern geht übrigens kompakter (ungetestet):

Code: Alles auswählen

        if stdout:
            files = filter(None, stdout.strip().split()[1:])
            if files:
                return (True, files, DEFAULT)

Verfasst: Sonntag 15. November 2009, 09:21
von stuhlbein
BlackJack hat geschrieben:@stuhlbein: Wenn man im Editor nicht erkennen kann, ob es sich um ein, zwei, oder gar mehr Leerzeichen handelt, und ihn auch nicht so einstellen kann, dass man das eindeutig sehen kann, dann ist das ein Problem mit dem Editor. Auf jeden Fall sind Oktalzahlen an sich schon sehr ungewöhnlich.
Ich habs mittlerweile rausgenommen.
Den letzten Kommentar habe ich nicht verstanden!? `apt` sollte keine leeren Zeichenketten in der Dateiliste liefern, und bei der Alternative filterst Du das explizit raus bevor Du es zurück gibst, warum also *nochmal* der Test? Und falls so etwas wirklich vorkommen kann, sollte es mindestens im Kommentar der Funktion stehen, damit rechnet man normalerweise nämlich nicht, oder es sollte halt auch im `apt`-Fall schon in der Funktion herausgefiltert werden.

Das Ausfiltern geht übrigens kompakter (ungetestet):

Code: Alles auswählen

        if stdout:
            files = filter(None, stdout.strip().split()[1:])
            if files:
                return (True, files, DEFAULT)
Beim test mit einigen Paketen lieferte apt teilweise eine list mit leeren Elementen. Daher der test.