假设一个havePerson
实例person
。person
可能有一个属性id
。你知道吗
我想写一个函数,当属性为None
或缺少时,得到一个空列表[]
;当属性为id
时,得到一个列表[12, ]
。你知道吗
def get_id_list(person):
try:
return [getattr(person, 'id'), ]
except AttributeError:
return []
这是完美的作品,但有没有一个“pythonic”的方式做这件事没有尝试除了块,也许在一行?你知道吗
Tags:
您可以使用^{} 检查属性:
可以写在一行中:
我会选择
但是,最好确保总是定义属性,这样就不必将
getattr
与默认值一起使用,也不必使用hasattr
检查是否存在。你知道吗你的方法是Python,只是做一些调整。你知道吗
首先,不要返回
try
块内部。可以在变量中保留id
值,并在else
子句中正确返回它。原因是您正在执行多个操作,比如获取属性和转换为列表(在其他情况下可能还有更多操作),而您只是在捕获AttributeError
。当您使用else
时,您可以很容易地处理其他异常,而且从编码风格的角度来看,它更优雅。你知道吗其次,您不需要使用
getattr
在这种情况下,您可以简单地使用直接属性访问。你知道吗另外,与使用
try-except
相反,您可能希望检查对象是否具有该属性,然后返回其值,但由于请求原谅比获得许可更容易。原则上try-exepct
更好。你知道吗相关问题 更多 >
编程相关推荐