Sie bekommen ein SyntaxError
weil raise
eine Aussage nicht ein Ausdruck ist, so dass der or raise KeyError
Teil nicht der Fall ist mache [syntaktischen] Sinn. Eine Problemumgehung besteht darin, genau das in eine Funktion wie die folgende zu setzen, die nur aufgerufen wird, wenn der nachgeschlagene Wert etwas nicht Wahres ist, wie None
, , ''
und []
.
Caveat: Beachten Sie, dass dies zu tun potenziell verwirrend ist, da effektiv, was sie tut, ist das Vorhandensein einer dieser Typen von Werten machen zu sein scheint, als ob die Schlüssel nicht da selbst waren aber technisch war es .. .so möchten Sie möglicherweise in Erwägung ziehen, Ihre eigene spezialisierte Ausnahmeklasse von einem der built-ins ableiten und dann mit denen statt [ab] unter Verwendung, was KeyError
normally means.
def raise_KeyError(msg=''): raise KeyError(msg) # Don't return anything.
try:
protocol = serverInfo_D['protocol'] or raise_KeyError('protocol not present')
except KeyError:
print 'Improper server config!'
AFAIK Python-Wörterbuch löst bereits eine KeyError-Ausnahme aus, wenn der angegebene Schlüssel fehlt. – Simone
@Simone - Er versucht, die Ausnahme auszulösen, wenn der Wert "None" ist, nicht nur wenn der Schlüssel fehlt. – Yarin