# shop.shop.id asin.id
a = PriceLog.objects.filter(year=2023, month=7, day=10, shop_id=1, asin_id=2).first()
if a:
print(a.price, a.currency)
else:
a = ''
b = ''# shop.shop.id asin.id
a = PriceLog.objects.filter(year=2023, month=7, day=10, shop_id=1, asin_id=2).first()
if a:
print(a.price, a.currency)
else:
a = ''
b = ''a = PriceLog.objects.filter(year=2023, month=7, day=10, shop_id=1, asin_id=2).first()
price = getattr(a, 'price', None)
currency = getattr(a, 'currency', None)
if price and currency:
print(price, currency)
else:
print("Price or currency not found.")
没啥特别优雅的方式。
Python 里没有类似 JS/C# 可选链操作符(
?.)、也没有 PHP 里安全导航运算符(->?)之类的语法糖,为了防止空指针异常只能一层一层判空处理。即便getattr()也只能判断一层(跟 PHP 里的isset()+ 三元表达式的作用类似),你要是个深层的嵌套结构还是得每层都去判断。为了简化这种判空,你可以使用 glom 这个库(用 Python 搞大数据的基本都知道这个库):
有点类似 JS 里
lodash.get()方法,只要 obj.a.b.c 任一一层是空的,直接返回第三个参数默认值;否则才返回最后的结果。你要是始终都只有一层结构,也可以直接用
getattr(),还少引入一个库。