isinstalled()

Code-Stücke können hier veröffentlicht werden.
Antworten
stuhlbein
User
Beiträge: 89
Registriert: Freitag 9. Januar 2009, 16:08

Ne art erweitertes "whereis". Hier gehts zum Code.
Die main() funktion soll als beispiel dienen.
Zuletzt geändert von stuhlbein am Samstag 14. November 2009, 23:02, insgesamt 5-mal geändert.
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.
stuhlbein
User
Beiträge: 89
Registriert: Freitag 9. Januar 2009, 16:08

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.
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)
stuhlbein
User
Beiträge: 89
Registriert: Freitag 9. Januar 2009, 16:08

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.
Antworten