Verfasst: Dienstag 5. Mai 2009, 20:37
Lach!
Ich habe das gerade nocheinmal installiert.
Diesmal hat es geklappt
Danke!
Ich habe das gerade nocheinmal installiert.
Diesmal hat es geklappt

Danke!
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
raise verhält sich aktuell wie eine Funktion, die explizit auf einen Typ prüft und dann anders handelt als sonst, also Ducktyping ignoriert.Das ist weder magisch, noch schlechter Stil.
Code: Alles auswählen
def f(thing):
if isinstance(thing, type) and issubclass(thing, Exception):
thing = thing()
# ...
Klar, mit solchen Exceptions macht man das nicht. Aber da geht auch ``raise MyError()`` nicht, so what?
Ich erwarte (bei einer Funktion) normalerweise, das diese Funktion genau beschreibt, wie es mit seinen Argumenten umgeht und welche Verhaltensweisen diese unterstützen müssen. raise als Statement erwartet ein Exemplar einer Subklasse von Exception oder von Exception selbst. Übergebe ich einfach nur einen Namen, erwarte ich (bei Betrachten des Tracebacks zb), das dieser Name diese Verhaltensweisen unterstützt. Insofern wäre der einzige Hinweis darauf, das ich hier tatsächlich eine Klasse übergebe, die übliche Python Namenskonvention. Ohne diese (und das wissen, was raise genau tut) hätte ich nicht den geringsten Anhaltspunkt, was an der Stelle schief gelaufen wäre, weil eben durch einen Typcheck und einer aus der Reihe fallenden Behandlung versucht wurde, den "Fehler" bei Übergabe des Arguments zu korrigieren.Sowas ist ja auch ähnlich einzuordnen, wie wenn du deine Liste "list" nennst.
Ich sagte ja nur, das ich mich selbst nicht darauf verlasse, das es so bleibt bzw es einfach klarer finde, auch hinter ein einzelnes "raise ValueError" noch ein Klammernpaar hinterzusetzenIch würde es (im Falle Python 3) einfach ausprobieren...