我的Django代码库有外键引用,它们是一些深层对象,感觉就像代码气味,需要检查每个级别的真实性。
有没有办法用更少的样板来检查这种东西?
采用这个简化的例子:
if page.banner.image:
# ...
如果page.banner
是可选的且不存在,则会返回None
并抛出异常,说明NoneType
没有image
属性
明显的解决方法是
if page.banner and page.banner.image:
# ...
但这会变得重复和冗长。我想你可以用getattr()
来做我喜欢的事情,但它更加丑陋:
if getattr(getattr(page, 'banner', None), 'image', None):
# ...
如果没有所有这些条件条款,是否有一种简洁的方法可以做到这一点?
答案 0 :(得分:3)
Python推荐使用easier to ask for forgiveness than permission方法。
try:
new_var = page.banner.image
except AttributeError:
....
关于请求许可与宽恕here有一些很好的讨论。