如何使用try和else来防止for循环停止

时间:2018-10-16 07:05:51

标签: python if-statement

我有一堆示例字典,其中一些值在列表中。我想从列表中检索信息,但有时某些键中的列表为空。我想做的是检索某些值。我想声明一下,如果列表为空,则从另一个键中检索一个值。

我做了一个if-elif语句,但无法使其正常工作。我尝试编写代码,如果list == None,则执行其他操作。似乎“无”无效。

我在下面举了一个我想做的事的例子。

sample_1 = {'description' : {'captions': [],
                           'tags': ['person',
                                   'cat']}}
sample_2 = {'description' : {'captions': ['NOT an empty list'],
                           'tags': ['person',
                                   'cat']}}


# if captions list is empty then print first item in 'tags' list.
# else if the 'captions' list has an item then print that item 
if sample_here['captions']==None in sample_here:
    result = sample_here['description']['tags'][0]
elif 'captions' in sample_here:
    result = sample_here['description']['captions'][0]

4 个答案:

答案 0 :(得分:3)

空列表[]不等于无。

sample_1 = {'description' : {'captions': [],
                           'tags': ['person',
                                   'cat']}}
sample_2 = {'description' : {'captions': ['NOT an empty list'],
                           'tags': ['person',
                                   'cat']}}
def get_captions(sample_here):
    # thanks to bruno desthuilliers's correction. [] has a bool value False
    if not sample_here['description']['captions']:
        result = sample_here['description']['tags'][0]
    else:
        result = sample_here['description']['captions'][0]
    return result

print(get_captions(sample_1))
print(get_captions(sample_2))

这将输出:

person
NOT an empty list

答案 1 :(得分:1)

在python中,您通常会尝试执行某些操作,然后处理引发的异常(如果有)。在您的情况下,我首先尝试从列表中读取并捕获引发的异常,如下所示:

try:
    result = sample_here['description']['captions'][0]        
except IndexError:
    result = sample_here['description']['tags'][0]

如果try块失败,则执行except块。

答案 2 :(得分:0)

好像是伪代码。

所以尝试:

if not sample['captions']:
    result = sample['description']['tags'][0]
else:
    result = sample['description']['captions'][0]

即使我不知道sample_here是什么。

或者做一个def:

def f(sample):
    if not sample['description']['captions']:
        result = sample['description']['tags'][0]
    else:
        result = sample['description']['captions'][0]
    return result

然后可以:

print(f(sample1))

或者:

print(f(sample2))

然后获得所需的输出

答案 3 :(得分:0)

您的要求基本上是检查列表是否为空

可以简单地以pythonic的方式实现:

 if not a: 
     print("a is empty")

希望有帮助。