【发布时间】:2019-01-23 15:59:20
【问题描述】:
背景是我从 JSON API 获取数据,其中许多字段是可选的,我想要数据库中的大部分字段。当特定字段不可用时,我希望将一个空字符串 ("") 写入数据库。
目前我一直在做:
if jsonobject.what_i_look_for:
dbstring = jsonobject.what_i_look_for
else:
dbstring = ""
然后将 dbstring 插入到数据库中。然而,我现在得到了更多这些字段,我想要一个更简洁的代码,而不是一个包含大约 80% 的 if 语句的函数。
我找到了if-shorthands 和this 速记来检查变量是否为空,但两者似乎都不能直接作为字符串工作。我已经在交互式 python 3.5.2 shell 中使用print() 对此进行了测试:
>>> print(testvar or "")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'testvar' is not defined
>>> print(testvar if testvar else "")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'testvar' is not defined
这个:echo (isset($testvar) ? $testvar : ""); 是我所寻求的 PHP 等价物。
编辑: 因为它似乎相关:我试图处理的对象来自 Telegram 的 JSON API。我使用python-telegram-bot 作为库,this 是一个示例对象。
【问题讨论】:
-
jsonobject.what_i_look_for是一个属性,而不是一个变量。您的问题是关于变量还是关于属性?此外,if jsonobject.what_i_look_for:检查what_i_look_for_attribute是否设置为真值;它不检查该属性是否存在。那么,再次,您的问题是什么? -
变量在 Python 中并不存在。有一些名称被分配了对象。
-
hasattr可能是您想要的,尽管ask forgiveness not permission 可能更好 -
是的,属性和变量是不同的。
-
如果你正在寻找一个对象的属性,那么你可以使用
hasattr(obj, name)来查看它是否存在,或者getattr(obj, name, default)`来获取它是否存在或者如果没有,则返回默认值。但是,如果您发现自己对大部分属性都使用hasattr或getattr,这通常表明您一开始并不想要一个充满属性的对象,而是字典。 (请注意,stdlib json 模块使用字典。)
标签: python string python-3.x if-statement conditional-operator