我尝试了所有的方法,但没有一个对我有效
有问题的JSON(trimmed)
json_data = requests.post(api_url, self.build_payload().json()
{
"gmetadata":[
{
"title_jpn":"",
}
]
}
字符串是curl -POST http://api.example.com
的输出
这是我的方法:
^{pr2}$我不希望它在['gmetadata'][0]['title_jpn']为None时执行。在
我试过多种变化
if 'title_jpn' in json_data['gmetadata'][0] is not "":
return 'Japanese Title: ' + pprint.pformat(json_data['gmetadata'][0]['title_jpn'])
以及
if 'title_jpn' in json_data['gmetadata'][0] is not None:
return 'Japanese Title: ' + pprint.pformat(json_data['gmetadata'][0]['title_jpn'])
if json_data['gmetadata'][0]['title_jpn'] is not None:
return 'Japanese Title: ' + pprint.pformat(json_data['gmetadata'][0]['title_jpn'])
if json_data['gmetadata'][0].get('title_jpn') is not None:
return 'Japanese Title: ' + pprint.pformat(json_data['gmetadata'][0]['title_jpn'])
if json_data['gmetadata'][0].get('title_jpn'):
return 'Japanese Title: ' + pprint.pformat(json_data['gmetadata'][0]['title_jpn'])
他们中的大多数都会给我错误:“无法隐式地将'NoneType'对象转换为str”,因为我认为编译器正在尝试转换字符串。为什么“is not None”对空json字符串不起作用?在
你的.get不起作用,因为这适用于字典。据我所知,“In”也不起作用,因为这是for循环的语法。您可能需要“Find”方法,因为它匹配一个较长字符串中的子字符串(如果我理解正确的话,这是您的目标)。如果找不到字符串,它将返回-1。因此,在您的例子中,请使用:
您误解了
in
的工作原理。in
检查字典中是否存在一个键,它不会将索引到字典中。这就是方括号的作用。在上面的行不会像您期望的那样进行计算。应该是的。在
^{pr2}$这可以进一步简化,因为在python中,空字符串
''
的值总是False
。因此,不要检查字符串是否不为空,只需检查它是否有任何值,如下所示:如果您试图防止
title_jpn
可能是可选的并且不总是存在的,那么您需要在If语句中执行两个条件(我认为这正是您最初尝试的):上面的行首先检查} 方法可以进一步简化这一点,该方法允许您提供一个默认值。在
title_jpn
键是否存在,然后再尝试检查它的值是否为空。使用dictionary ^{上面的代码将检查
title_jpn
是否在字典中,如果在字典中,则返回值;如果不在字典中,None
作为默认值。由于在python中,None
被解释为False
,if块将不会运行,这是所需的行为。在但是,由于
.get()
自动将默认值设置为None
,因此您可以简单地执行以下操作。在我的错误不在方法内部,而是在外部。你不知道因为我没发这个,但是
产生了错误。
build_title_jpn_string()
将返回none,但尝试将其与字符串标题相关,从而产生错误。在我修复了这个问题,当if没有命中时返回一个空字符串。在
相关问题 更多 >
编程相关推荐