我喜欢python的一行代码:
u = payload.get("actor", {}).get("username", "")
我面临的问题是,除了知道“payload”是一个字典之外,我无法控制“payload”包含什么。所以,如果“payload”没有“actor”,或者它有,actor有或没有“username”,这一行就可以了。在
当然,当有效负载有actor时,问题就出现了,但actor不是字典。在
有没有一种方法可以像一句简单的话那样全面地完成这一点,并考虑到“演员”可能不是字典的可能性?
当然,我可以用'isinstance'来检查类型,但那不是很好。在
我并不要求一个单一的班轮本身,只是要求最有效的方式,以确保'u'得到填充,没有例外,没有事先知道什么是'有效载荷'。在
使用EAFP
正如xnx建议的那样,您可以利用以下python范式:
您也可以在
KeyError
s上使用它:使用具有容错索引的包装器
有时候,在Python中使用类似于null条件运算符的东西会更好。使用某些helper类,可以将其压缩为一个线性表达式:
^{pr2}$ps:除了
__getitem__
之外,还可以重新定义__getattr__
,所以你甚至可以写Forgive(data)['actor'].username.get('default1')
。在为什么不使用例外:
黑格尔·黑格杜斯给出的答案是正确的,但是有一点需要注意的是,异常处理要比使用if..else语句慢得多。在
例如,如果您正在迭代数千个
payload
对象,而actor条目只是偶尔不是字典,那么这段代码是完全有效的。在但是,如果您要迭代上千个
payload
对象,并且每个其他actor
条目都不是字典,那么您最好使用此代码。在更多讨论请点击这里--https://mail.python.org/pipermail/tutor/2011-January/081143.html
更新
此外,代码语句也可以作为一行代码重新编写,尽管没有两行语句那么易读
^{pr2}$相关问题 更多 >
编程相关推荐