如果dict中没有任何值,如何引发异常?

2024-09-27 09:21:34 发布

您现在位置:Python中文网/ 问答频道 /正文

如果返回的值是None,我想引发一个KeyError异常,但是下面抛出一个SyntaxError: invalid syntax异常。

try:
   protocol = serverInfo_D['protocol'] or raise KeyError("protocol not present")
except KeyError:
   print "Improper server config"

有什么简单的方法可以让它工作?


Tags: ornonenotprotocolraiseprintsyntaxtry
3条回答

你得到了一个SyntaxError,因为raise是一个语句而不是表达式,所以or raise KeyError部分没有[语法]意义。一种解决方法是将其放入如下函数中,仅当查找的值不是真值时才调用该函数,如None0''[]

警告:请注意,这样做可能会造成混淆,因为它有效地做的是使这些类型的值的存在看起来好像不存在protocol键,即使技术上是这样……所以您可能要考虑从built-ins和然后用KeyErrornormally means来处理这些问题,而不是[ab]。

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

protocol = serverInfo_D.get('protocol')
if protocol is None:
   print "server config is not proper"

相关问题 更多 >

    热门问题