AtributteError "object has no attribute" - 如何在没有 try/except 的情况下防止 - 访问模型字段

AtributteError "object has no attribute" - how to prevent without try/except - accessing model field

我有一个问题: (我正在使用 Django 1.8,Python 2.7.15) 我正在从数据库中获取一个对象:

shop_users = ShopUsers.objects.get(pk=_id)

然后,如果该对象存在,我正在为视图准备数据:

if shop_users:
    data = {
        'full_name': shop_users.full_name,
        'shop': shop_users.shop.title,
        'price_title': shop_users.price.title if shop_users.price.title else '',
        'package_price': shop_users.price.price,
        'user_price': shop_users.payment.operation_amount
    }

但有可能 shop_users.price.title 不存在。

我想在像上面那样准备数据时检查它(我正在做'...如果...其他'),但是如果shop_users.price.title不存在它会提供AttributeError。

我可以在 'data' 声明之前使用 try/except 但这会使我的代码加倍...

使用 (... if ... else) 处理 AttributeError 有什么技巧吗?

可能 shop_users.price.title[0](无效)

或 get(shop_users.price.title) ?

我只是不想加倍我的代码......但我不知道有什么技巧:/

我是小学生。感谢您的帮助!

getattr 完全按照您的要求去做。

试试这个而不是 'shop': shop_users.shop.title:

'shop': getattr(shop_users.shop,'title', None)

根据getattr doc:

getattr(object, name[, default]) -> value

Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y. When a default argument is given, it is returned when the attribute doesn't exist; without it, an exception is raised in that case.