Wie raise exception, wenn Keine value encountered in dict?
Ich möchte ein KeyError
Ausnahme, wenn der zurückgegebene Wert ist None
, aber die folgenden Würfe eine SyntaxError: invalid syntax
Ausnahme.
try:
protocol = serverInfo_D['protocol'] or raise KeyError("protocol not present")
except KeyError:
print "Improper server config"
Was ist Sie eine einfache Möglichkeit, diese arbeiten?
- AFAIK Python-dictionary bereits löst eine KeyError-Ausnahme aus, wenn der angegebene Schlüssel fehlt.
- Er versucht zu erhöhen Ausnahme, wenn der Wert
None
, nicht nur, wenn der Schlüssel fehlt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erhalten Sie einen
SyntaxError
weilraise
ist ein statement, ein Ausdruck, also dieor raise KeyError
Teil nicht machen [syntaktische] Sinn. Eine Problemumgehung ist nur, dass in einer Funktion wie der folgenden, die wird nur aufgerufen, wenn der gesuchte Wert ist etwas, was nicht Wahr ist, wieNone
,0
,''
, und[]
.VORBEHALT: Beachten Sie, dass dies ist möglicherweise verwirrend, da das, was es effektiv macht, ist das Vorhandensein von jeder dieser Arten von Werten angezeigt werden, als ob die
protocol
Schlüssel war nicht da, obwohl technisch es war...so möchten Sie vielleicht zu prüfen, ableiten Ihre eigene, spezialisierte exception-Klasse aus einer der built-ins und dann befassen sich mit diese anstelle von [ab]mit wasKeyError
normalerweise bedeutet.Wenn Sie es wollen, in einer Zeile können Sie immer eine Funktion:
Warum wollen Sie eine Ausnahme, wenn Sie es so? Verwenden Sie einfach
.get()
und überprüfenNone
.Den
try
undexcept KeyError
Kombination sollte funktionieren. Was nicht funktioniert für Sie?Und da dies in der Fortsetzung Ihrer vorherigen Frage, das war keine Arbeit, denn Sie waren mit
dict.get
, die nie wirftKeyError
.Jedoch wird der code in dieser Frage. Und Sie brauchen nicht
or raise KeyError
.or raise KeyError
Teil der OP-code ist eineSyntaxError
weilraise
ist eine Anweisung keinen Ausdruck.Ich denke, das ist mehr entlang den Linien von dem, was Sie wollen. Bitte Kommentar, wenn Sie es brauchen zu ändern.
Hoffe, das hilft
is None
besser sein wird.