@Malachite: Die Dokumentation von `isinstance()` spricht nicht von einer Liste als zweites Argument. Wenn man es mal ausprobiert:
Code: Alles auswählen
In [393]: isinstance(42, [int])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/bj/<ipython console> in <module>()
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types
Gib einfach den Typ direkt an:
Alternativ kann man auch ein Tupel mit Typen angeben, dann ist der Ausdruck wahr wenn mindestens einer der Typen zutrifft.
`is_subclass_of()` wird wahrscheinlich `issubclass()` sein. `class_parents()` wahrscheinlich das `__bases__`-Attribut, wobei ich jetzt nicht weiss ob das ein Implementierungsdetail ist. `inspect.getclasstree()` sollte implementierungsunabhängig funktionieren.
`is_numeric()` gibt es nicht — braucht man in einer Sprache wo es eine klare Trennung zwischen Zahlen und Zeichenketten gibt, aber IMHO auch nicht wirklich.
Genau so sind die anderen Funktionen eher „Exoten”. Wenn man oft auf konkrete Typen oder Unterklassen testen muss, hat man objektorientierte Programmierung nicht verstanden und unterläuft zudem das „duck typing” von Python.
Der Sinn von `set_exception_handler()` erschliesst sich mir jetzt nicht wirklich. Wenn Du alle Ausnahmen abfangen willst — was man in der Regel gar nicht wollen sollte — kann man ein nacktes ``except:`` verwenden. Aber wie gesagt, davon sollte man Abstand nehmen, denn selten bis nie kann man an einer Stelle wirklich *alle* Ausnahmen *sinnvoll* behandeln, denn man weiss ja gar nicht welche das alle sein können. Und bei einigen wie zum Beispiel einem `MemoryError` weiss ich auch nicht wie man da sinnvoll weitermachen könnte wenn man ihn einfach ignoriert‽ Oh, und der Programmabruch mittels `sys.exit()` wird auch über eine Ausnahme realisiert, wenn man also alle Ausnahmen behandelt, sollte man sicherstellen, dass man damit nicht aus versehen das bewusste Beenden des Programms verhindert.