我应该在try-except块中添加else语句来处理return语句吗?

时间:2019-08-26 20:37:12

标签: python if-statement return try-except

我正在尝试比较列表中的项目,并找到可能缺少某项的任何位置。

我正在使用for循环,方法是枚举列表以将当前项目中的数字与下一个项目进行比较,并检查下一个项目中的数字仅大1。在我看来,我应该尝试一下-except块,这样当循环的最后一次迭代运行并尝试与不存在的下一个项目进行比较时,我不会收到IndexError。

file_list = []
for i in range(100):
    file_list.append('img' + str(i).zfill(3) + '.tif')

del file_list[50]

for i, file in enumerate(file_list):
    try:
        if int(file[3:6]) + 1 != int(file_list[i + 1][3:6]):
            return 'File missing after {}'.format(file_list[i])
    except IndexError:
        print('IndexError at i = {}'.format(i))

此代码有效,但是我读到您应该避免在try块本身中放置太多代码,以避免添加可能引起其他位置(而非要测试的代码部分)异常的代码。在这种情况下,是否应在try-except块中添加else语句以放置return语句?在这种情况下,我该如何管理if语句?

1 个答案:

答案 0 :(得分:1)

  

在我看来,我应该使用try-except块,以便在运行循环的最后一次迭代并尝试与不存在的下一个项目进行比较时不会收到IndexError。

我认为更好的解决方案是编写在正常情况下不会引发异常的代码。

您可以从 second 项开始迭代并与 previous进行比较,而不是将当前项与下一项进行比较,正如您注意到的那样,这将导致最后一项发生异常。 项:

for i in range(1, len(file_list)):
    # compare file_list[i] to file_list[i-1]