492 Stimmen

Wie kann man prüfen, ob ein Objekt eine Liste oder ein Tupel (aber keine Zeichenkette) ist?

Das ist es, was ich normalerweise tue, um sicherzustellen, dass es sich bei der Eingabe um eine list / tuple - aber nicht ein str . Denn oft bin ich über Bugs gestolpert, bei denen eine Funktion eine str Objekt versehentlich, und die Zielfunktion macht for x in lst unter der Annahme, dass lst ist eigentlich ein list o tuple .

assert isinstance(lst, (list, tuple))

Meine Frage lautet: Gibt es eine bessere Möglichkeit, dies zu erreichen?

0voto

ersh Punkte 339
assert (type(lst) == list) | (type(lst) == tuple), "Not a valid lst type, cannot be string"

-1voto

ATOzTOA Punkte 32520

Tun Sie es einfach

if type(lst) in (list, tuple):
    # Do stuff

-3voto

Jean Doux Punkte 13

In Python >3.6

import collections
isinstance(set(),collections.abc.Container)
True
isinstance([],collections.abc.Container)
True
isinstance({},collections.abc.Container)
True
isinstance((),collections.abc.Container)
True
isinstance(str,collections.abc.Container)
False

-6voto

DrBloodmoney Punkte 2680

Ich neige dazu, dies zu tun (wenn ich wirklich, wirklich musste):

for i in some_var:
   if type(i) == type(list()):
       #do something with a list
   elif type(i) == type(tuple()):
       #do something with a tuple
   elif type(i) == type(str()):
       #here's your string

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X