有人可以解释这个python代码如何不给出错误

wob*_*col 0 python if-statement indentation

所以我继承了一段相当糟糕的代码.缩进就像我发现的那样.为什么else不会抛出错误?据我所知,代码永远不会达到它.

    for l in range(1,9):
        indexes = pickle.load(open('%s_%d.pkl'%(fc,l)))

        clusters_sum = sum([indexes[i]['count'] for i in indexes])
        print >> out, 'Lane %d: %d clusters PF.\n%8s  %9s  %5s' % (l,clusters_sum,'Index','Count','%')
        for i in sorted(indexes, key=lambda x: indexes[x]['name']):
            pct = indexes[i]['count'] and indexes[i]['count']/clusters_sum*100 or 0
            if pct < 0.06: continue
            print >> out, '%8s  %9d  %5.1f' % (indexes[i]['name'], indexes[i]['count'], pct)
        else: print >> out
Run Code Online (Sandbox Code Playgroud)

And*_*ark 6

请参阅else有关循环子句的文档,这是有效的语法,else只要循环中没有,或未捕获异常break,就会执行块中的代码return.

在这种特殊情况下,else将始终执行该子句,因为上述条件都不会发生(除了异常),因此它等效于以下内容:

    for l in range(1,9):
        indexes = pickle.load(open('%s_%d.pkl'%(fc,l)))

        clusters_sum = sum([indexes[i]['count'] for i in indexes])
        print >> out, 'Lane %d: %d clusters PF.\n%8s  %9s  %5s' % (l,clusters_sum,'Index','Count','%')
        for i in sorted(indexes, key=lambda x: indexes[x]['name']):
            pct = indexes[i]['count'] and indexes[i]['count']/clusters_sum*100 or 0
            if pct < 0.06: continue
            print >> out, '%8s  %9d  %5.1f' % (indexes[i]['name'], indexes[i]['count'], pct)
        
        print >> out
Run Code Online (Sandbox Code Playgroud)