Issue
I want to raise a KeyError
exception if the value returned is None
, but the following throws a SyntaxError: invalid syntax
exception.
try:
protocol = serverInfo_D['protocol'] or raise KeyError("protocol not present")
except KeyError:
print "Improper server config"
What's a simple way to get this working?
Solution
You're getting a SyntaxError
because raise
is a statement not an expression, so the or raise KeyError
part doesn't make [syntactic] sense. One workaround is to put just that into a function like the following, which is only called if the looked-up value is something non-True, like None
, 0
, ''
, and []
.
Caveat: Note that doing this is potentially confusing since what it effectively does is make the presence of any of those types of values appear to be as though the protocol
key wasn't there even though technically it was...so you might want to consider deriving your own specialized exception class from one of the built-ins and then deal with those instead of (ab)using what KeyError
normally means.
def raise_KeyError(msg=''): raise KeyError(msg) # Doesn't return anything.
try:
protocol = serverInfo_D['protocol'] or raise_KeyError('protocol not present')
except KeyError:
print('Improper server config!')
Answered By - martineau
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.