2024-09-27 09:21:34 发布
网友
如果返回的值是None,我想引发一个KeyError异常,但是下面抛出一个SyntaxError: invalid syntax异常。
None
KeyError
SyntaxError: invalid syntax
try: protocol = serverInfo_D['protocol'] or raise KeyError("protocol not present") except KeyError: print "Improper server config"
有什么简单的方法可以让它工作?
你得到了一个SyntaxError,因为raise是一个语句而不是表达式,所以or raise KeyError部分没有[语法]意义。一种解决方法是将其放入如下函数中,仅当查找的值不是真值时才调用该函数,如None、0、''和[]。
SyntaxError
raise
or raise KeyError
0
''
[]
警告:请注意,这样做可能会造成混淆,因为它有效地做的是使这些类型的值的存在看起来好像不存在protocol键,即使技术上是这样……所以您可能要考虑从built-ins和然后用KeyErrornormally means来处理这些问题,而不是[ab]。
protocol
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!'
如果你想把它排成一行,你可以做一个函数:
def valueOrRaise(data, key): value = data.get(key) if value is None: raise KeyError("%s not present" % key) return value try: protocol = valueOrRaise(serverInfo_D, 'protocol') except KeyError: print "server config is not proper"
如果你真的像这样使用它,为什么要有一个例外?只需使用.get()并检查None。
.get()
protocol = serverInfo_D.get('protocol') if protocol is None: print "server config is not proper"
你得到了一个
SyntaxError
,因为raise
是一个语句而不是表达式,所以or raise KeyError
部分没有[语法]意义。一种解决方法是将其放入如下函数中,仅当查找的值不是真值时才调用该函数,如None
、0
、''
和[]
。警告:请注意,这样做可能会造成混淆,因为它有效地做的是使这些类型的值的存在看起来好像不存在
protocol
键,即使技术上是这样……所以您可能要考虑从built-ins和然后用KeyError
normally means来处理这些问题,而不是[ab]。如果你想把它排成一行,你可以做一个函数:
如果你真的像这样使用它,为什么要有一个例外?只需使用
.get()
并检查None
。相关问题 更多 >
编程相关推荐