模板代码的Python缩进混淆

时间:2019-03-01 21:29:54

标签: python indentation

我收到此错误 unindent does not match any outer indentation level

if line.find('ubox')>0

我对python不太了解,但是在IDE中按Shift Tab不能解决问题。这是我其中一项作业的模板代码,因此当我复制粘贴时,它一定弄乱了缩进。在给定的文本文件中,如果排队但只盯着代码看,我会认为如果在elif中是嵌套的。

def parse_dot_ps_file(filepath):
    '''
    Parsing of a dot.ps file that contains result of RNAfold program
    @args:
    filepath: (full or relative) path to the dot.ps.
    @return:
    dot_ps_result: list f lists with i, j, freq_i_j
    '''
    dot_ps_result = []
    with open(filepath, 'r') as f:
        is_data = False
        for line in f:
            if not is_data and line.startswith('%start of base pair probability data'):
                is_data = True
                continue
            elif is_data and line.startswith('showpage'):
                break
            elif is_data:
        if line.find('ubox') > 0:
                    # take only first 3 numbers
                    data_line = line.split()[:3]
                    dot_ps_result.append(
                        [int(data_line[0]), int(data_line[1]), float(data_line[2])]
                    )
    return dot_ps_result

2 个答案:

答案 0 :(得分:0)

解释器希望在elif is_data:下找到某些内容,但是什么也没找到。因此,要么用您的代码填充它,要么在if line.find('ubox') > 0:条件执行后让行elif is_data:执行,然后修复缩进。

答案 1 :(得分:0)

if line.find('ubox') > 0:
# take only first 3 numbers
    #these two lines below are the problem 
    data_line = line.split()[:3]
    dot_ps_result.append([int(data_line[0]), int(data_line[1]), float(data_line[2])])

您还有一个else语句,下面没有任何代码,因此缩进悬挂了,您希望脚本在那里做什么?您只需要pass就可以了

您在本节中放置了太多标签。

希望有帮助