Seite 1 von 1

Wie ausprobieren, ob array existiert?

Verfasst: Mittwoch 1. April 2015, 10:41
von python48
Hallo,

ich brauche einen check, um zu prüfen ob ein bestimmtes array Feld/Liste existiert.
Falls ja soll darauf zugegriffen werden, falls nicht, soll einfach eine Meldung geprinted werden,
damit kein error ausgegeben wird und meine scriptausführung nicht unterbrochen wird.
Wenn ich den unten geposteten code anwende, dann wird der folgende fehler asugegeben, falls
es das array nicht gibt, also in response[1] nichts reingeschrieben wurde.

Code: Alles auswählen

    if 1 < len(response):
TypeError: 'NoneType' object has no attribute '__getitem__'

Code: Alles auswählen

    if 1 < len(response):
        if response[1] != '101':
            print "ERROR"
        else:
            print "OK"
    else:
        pass
Würde mich sehr über Hilfe freuen, hab schon einiges ausprobiert, ohne erfolg.

Vielen Dank euch schon mal! :)

Beste Grüße, python48.

Re: Wie ausprobieren, ob array existiert?

Verfasst: Mittwoch 1. April 2015, 10:50
von Hyperion
Prüfe *zuerst*, ob die Liste überhaupt mindestens zwei Einträge hat, und *danach* auf den Inhalt des Index. Schlägt die erste Prüfung fehl, so wird die zweite, die dann eigentlich zu einem ``IndexError`` führen würde, nicht mehr ausgeführt:

Code: Alles auswählen

if len(response) > 1 and response[1] == "101":
    print("OK")
else:
    print("ERROR")
Edit: Ach... dank DasIch habe ich jetzt erst gesehen, dass ``response`` auch ``None`` sein kann. Dann müsste man den Test entsprechend *ganz nach vorne* stellen!

Re: Wie ausprobieren, ob array existiert?

Verfasst: Mittwoch 1. April 2015, 10:50
von DasIch
response ist, wie die Exception schon sagt, None und kein Array. Arrays verwendet man übrigens nur sehr selten, üblicherweise verwendet man Listen, die du wahrscheinlich auch meinst.

Speziell auf None kann man mit ``obj is None`` testen.

Re: Wie ausprobieren, ob array existiert?

Verfasst: Mittwoch 1. April 2015, 10:59
von python48
Wie kann ich mir die obj is NONE abfrage vorstellen?

Code: Alles auswählen

    if response == `obj is None`:
        print("ERROR")
    else:
        print("OK")

Vielen Dank euch schon mal :)

EDIT: Sorry, ja ich meine listen und nicht arrays :)

Re: Wie ausprobieren, ob array existiert?

Verfasst: Mittwoch 1. April 2015, 11:02
von BlackJack
@python48: ``is`` ist ein binärer Operator wie ``==``. Genau so benutzt man den auch.

Re: Wie ausprobieren, ob array existiert?

Verfasst: Mittwoch 1. April 2015, 11:10
von python48
danke.

Bei

Code: Alles auswählen

if response != 'None':
gibts den fehler:

Code: Alles auswählen

    if response[1] != '101':
TypeError: 'NoneType' object has no attribute '__getitem__'
Auch Fehler bei

Code: Alles auswählen

if response[1] != 'None':
Bei nur

Code: Alles auswählen

if response != None:
sagt er mir, dass auf None nicht mit equality operators geprüft wird.

Was mache ich hier falsch? :/

Re: Wie ausprobieren, ob array existiert?

Verfasst: Mittwoch 1. April 2015, 11:15
von BlackJack
@python48: Wer sagt das? Doch wahrscheinlich Deine IDE und nicht Python und das ist eine Warnung und kein Fehler. Allerdings ist die Warnung ja richtig denn wir hatten ja gerade den Operator den man benutzt geklärt, warum schreibst Du dann wieder ``!=``?

Re: Wie ausprobieren, ob array existiert?

Verfasst: Mittwoch 1. April 2015, 11:27
von python48
Es funzt, ich ignorier mal die anmerkung meiner IDE.

Ich benutze '!=' weil es für mein programm gerade vorteilhafter ist.
Außerdem wird bei '==' die gleiche warnung ausgesprochen.

Vielen Dank für die schnelle hilfe! :)


Beste Grüße, python48.

Re: Wie ausprobieren, ob array existiert?

Verfasst: Mittwoch 1. April 2015, 11:33
von BlackJack
@python48: Natürlich wird bei ``==`` die gleiche Warnung angezeigt, ist ja auch ein Test auf Wertegleichheit. ”Vorteilhafter” ist das nur weil Du offenbar nicht weisst wie grundlegende Ausdrücke in Python funktionieren und was ein binärer Operator ist. Da kann man sich natürlich drauf ausruhen, muss man aber nicht.

Re: Wie ausprobieren, ob array existiert?

Verfasst: Mittwoch 1. April 2015, 11:41
von python48
Womöglich hast du recht, das wusste ich wirklich nicht.
Habe angenommen, dass '!=' einfach das invertierte von '==' ist.

Ein kuzes Stichwort oder Hinweis mehr hätte jetzt an dieser Stelle auch nicht geschadet,
trozdem vielen dank ;)

Re: Wie ausprobieren, ob array existiert?

Verfasst: Mittwoch 1. April 2015, 12:18
von DaftWullie
@python48
eine kurze Google-Suche hätte auch nicht geschadet. in PEP8 steht auch etwas dazu...

Re: Wie ausprobieren, ob array existiert?

Verfasst: Mittwoch 1. April 2015, 12:25
von Sirius3
@python48: es geht hier nicht um == oder !=, das ist tatsächlich im Normalfall das Gegenteil vom anderen. Es geht darum, dass man auf None per "is" oder "is not" prüft. Alternativ kann man auch einfach versuchen auf response[1] zuzugreifen und die anderen Fälle per Exception abfangen.

Re: Wie ausprobieren, ob array existiert?

Verfasst: Mittwoch 1. April 2015, 12:26
von Hyperion
Und noch viel wichtiger: Nutze eine Python-Shell zum Experimentieren bei solchen Fragen! Das kann man darin alles viel schneller ermitteln und nachhaltiger mental verarbeiten, als durch mühsames, iteratives Umschreiben und Starten eines Programms.