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.
我有一个问题: (我正在使用 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.