Seite 1 von 1
Wie kann man den "Auslöser" eines ValueError ermitteln?
Verfasst: Dienstag 13. November 2012, 13:34
von mutetella
Hallo,
ich behandle einen ValueError und würde meine Fehlermeldung gerne abhängig von "need more than..." bzw. "too many values" formulieren. Das ValueError-Objekt liefert mir aber nur den Text. Gibt es keine andere Möglichkeit als sowas:
lunar hat
hier von 'EnvironmentError.errno'-Attribut geschrieben. Sowas hätte ich gerne für den ValueError. Gibt's das?
mutetella
Re: Wie kann man den "Auslöser" eines ValueError ermitteln?
Verfasst: Dienstag 13. November 2012, 13:58
von Sirius3
Hallo mutetella,
wenn Du den ValueError selber wirfst, kannst Du ihm natürlich mehr als ein Argument geben,
bzw. wie bei jedem Python-Objekt mit zusätzlichen Attributen bestücken.
Wenn die Methode die die Exception erzeugt aber vorgegeben ist, ist das schwierig.
Kannst Du mehr zum Hintergrund erzählen?
Grüße
Sirius
Re: Wie kann man den "Auslöser" eines ValueError ermitteln?
Verfasst: Dienstag 13. November 2012, 14:13
von mutetella
Sirius hat geschrieben:Kannst Du mehr zum Hintergrund erzählen?
Code: Alles auswählen
...
try:
begin, end = args.split('-')
except ValueError, e:
if e.args[0].startswith('need more'):
raise ValueError(ERR_TOO_LITTLE_DATERANGE)
elif e.args[0].startswith('too many'):
raise ValueError(ERR_TOO_MANY_DATERANGE)
else:
raise ValueError(ERR_UNKNOWN_VALUE_ERROR)
Die originale Fehlermeldung auf einen bestimmten Text zu untersuchen finde ich halt nicht wirklich gut. Da wäre mir ein errorcode zur Bestimmung lieber.
mutetella
Re: Wie kann man den "Auslöser" eines ValueError ermitteln?
Verfasst: Dienstag 13. November 2012, 14:24
von Sirius3
Der String ist das einzige was du über den ValueError erfährst.
Im Übrigen ist split auch nicht geeignet um nichtvertrauenswürdige Inputdaten zu validieren.
Re: Wie kann man den "Auslöser" eines ValueError ermitteln?
Verfasst: Dienstag 13. November 2012, 14:56
von mutetella
Besser so?
Code: Alles auswählen
...
args = args.split('-')
length = len(args)
if length == 2:
begin, end = args
elif length > 2:
raise ValueError(ERR_TOO_MANY_DATERANGE)
else:
raise ValueError(ERR_TOO_LITTLE_DATERANGE)
Re: Wie kann man den "Auslöser" eines ValueError ermitteln?
Verfasst: Dienstag 13. November 2012, 15:16
von EyDu
Wenn du die Ausnahmen selber wirfst, dann kannst du von den Exceptions für jeden Fehlerfall ableiten. Dann musst du dich nicht mehr mit den Strings rumärgern. Wenn eine Bibliothek keine detailierten Fehler wirft, dann hast du Pech gehabt und musst damit leben, bzw. kannst versuchen die Fehlermeldung zu parsen. Da die Fehlermeldung nicht standardisiert sind, würde ich davon aber wohl die Finger lassen oder zumindest die Originalfehlermeldung mit ausgeben/loggen.
Re: Wie kann man den "Auslöser" eines ValueError ermitteln?
Verfasst: Dienstag 13. November 2012, 16:01
von lunar
@mutetella Konkret bedeutet das:
Code: Alles auswählen
class RangeTooLargeError(ValueError):
pass
class RangeTooSmallError(ValueError):
pass
# ...
if length == 2:
begin, end = args
else:
raise RangeTooLargeError() if length > 2 else RangeTooSmallError()