2017-08-08 83 views
-5

当我试图嵌套这个for循环时,我不断收到一个缩进错误,我不明白为什么。当我将它与嵌套在搜索栏[i-3:i + 3]中的“for-l”相同时,它会运行:“我只是在学习,所以我明白它可能不是最简洁的代码。谢谢你的时间。缩进错误没有意义 - Python

ne=pd.DataFrame() 

    for word in keywordList:  
     for i, line in enumerate(searchlines): 
      if word in line: 
      for l in searchlines[i-3:i+3]: oFile.write(fileName + delim + word + delim +str(i) + delim +str(l)) ## prints Unused MidFile for Reference 
    ### Creates normal case line for Named Entity recognition & all Lower Case line for flagging keywords 
      #normalCaseLine = str(searchlines[i-3] + searchlines[i-2] + searchlines[i-1] + searchlines[i] + searchlines[i+1] + searchlines[i+2] + searchlines[i+3]).replace('\n',' ') 
      normalCaseLine = searchlines[i-3].rstrip('\n') + searchlines[i-2].rstrip('\n') + searchlines[i-1].rstrip('\n') + searchlines[i].rstrip('\n') + searchlines[i+1].rstrip('\n') + searchlines[i+2].rstrip('\n') + searchlines[i+3].rstrip('\n') 
      lowerCaseLine = normalCaseLine.lower() 
      result = dict((key, len(list(group))) for key, group in groupby(sorted(lowerCaseLine.split()))) 
    ### Get Detail Keywords 
      cleanResult = {word: result[word] for word in result if word in detailKeywordList} 
      cleanNormLine = normalCaseLine.replace('\x92s',' ').replace('\x92s',' ').replace('\x96',' ').replace('\x95',' ') 
    ### Enter here if we need to seperate words ex. Tech Keywords 

      ner_output = st.tag(str(cleanNormLine).split()) 
      chunked, pos = [], prev_tag=[], "" 
    ERROR IS HERE!! 
        for i, word_pos in enumerate(ner_output): 
           word, pos = word_pos 
           if pos in ['PERSON', 'ORGANIZATION', 'LOCATION','DATE','MONEY'] and pos == prev_tag: 
            chunked[-1]+=word_pos 
           else: 
               chunked.append(word_pos) 
               prev_tag = pos 

      clean_chunkedd = [tuple([" ".join(wordpos[::2]), wordpos[-1]]) if len(wordpos)!=2 else wordpos for wordpos in chunked] 

    ### Write Results to Combined file 
      midFile.write(fileName+'-'+str(i)+delim+word+delim+str(cleanNormLine)+delim+str(str(cleanResult).split(','))+'\n') 
    ### Create NER DataFramez 

      nerTagDF = DataFrame(clean_chunkedd, columns = ['Word','Classification']) 
      nerTagDF['File_Name'] = fileName 
      nerTagDF['Line Key'] = str(i) 
      ne = ne.append(nerTagDF) 

    oFile.close() 
    midFile.close() 
+5

很抱歉,但你的代码是一个烂摊子,这是不必阅读所有的缩进不一致,而不是在同一深度的每一个控制点的线条清晰。例如立即:'在wordpress关键词列表中:对于i,在枚举行(searchlines)中为: 如果在一行中:'在第一个块缩进中有4个空格,但随后为2个空格,并且这贯穿整个其余的代码 – EdChum

+0

是的,更不用说,这是缩进错误,而不是缩进:)只需将它重新写入/复制粘贴到新窗口/选项卡/文件中逐行。 – StefanK

+0

每一层压痕应该是4个空格。看看这个部分,看起来它超过了4个,可能是8个或更多。 – mauve

回答

0

您的for循环没有嵌套在任何东西中。在Python中,使用缩进的一个地方是在某个范围内定义了一段代码,例如在whilefor循环内,在if语句中,或定义某个函数时。

您的for循环在chunked, pos = [], prev_tag=[], ""之后缩进,这只是一个独立的语句。因此,您需要取消缩进循环,直到它与周围代码的缩进匹配。这可能是我可以说的最一般的方式。

1

一个额外的轻微标签空间错误消息

# -*- coding: utf-8 -*- 

“” 近给予 “创建于星期二八月 08十八时48分四十秒2017年

@author:用户 ”“”

NE = pd.DataFrame()

for word in keywordList:  
    for i, line in enumerate(searchlines): 
     if word in line: 
     for l in searchlines[i-3:i+3]: oFile.write(fileName + delim + word + delim +str(i) + delim +str(l)) ## prints Unused MidFile for Reference 
### Creates normal case line for Named Entity recognition & all Lower Case line for flagging keywords 
     #normalCaseLine = str(searchlines[i-3] + searchlines[i-2] + searchlines[i-1] + searchlines[i] + searchlines[i+1] + searchlines[i+2] + searchlines[i+3]).replace('\n',' ') 
     normalCaseLine = searchlines[i-3].rstrip('\n') + searchlines[i-2].rstrip('\n') + searchlines[i-1].rstrip('\n') + searchlines[i].rstrip('\n') + searchlines[i+1].rstrip('\n') + searchlines[i+2].rstrip('\n') + searchlines[i+3].rstrip('\n') 
     lowerCaseLine = normalCaseLine.lower() 
     result = dict((key, len(list(group))) for key, group in groupby(sorted(lowerCaseLine.split()))) 
### Get Detail Keywords 
     cleanResult = {word: result[word] for word in result if word in detailKeywordList} 
     cleanNormLine = normalCaseLine.replace('\x92s',' ').replace('\x92s',' ').replace('\x96',' ').replace('\x95',' ') 
### Enter here if we need to seperate words ex. Tech Keywords 

     ner_output = st.tag(str(cleanNormLine).split()) 
     chunked, pos = [], prev_tag=[], "" 
#ERROR IS HERE!! 
       for i, word_pos in enumerate(ner_output): 
        word, pos = word_pos 
        if pos in ['PERSON', 'ORGANIZATION', 'LOCATION','DATE','MONEY'] and pos == prev_tag: 
         chunked[-1]+=word_pos 
        else: 
         chunked.append(word_pos) 
         prev_tag = pos 

     clean_chunkedd = [tuple([" ".join(wordpos[::2]), wordpos[-1]]) if len(wordpos)!=2 else wordpos for wordpos in chunked] 

### Write Results to Combined file 
     midFile.write(fileName+'-'+str(i)+delim+word+delim+str(cleanNormLine)+delim+str(str(cleanResult).split(','))+'\n') 
### Create NER DataFramez 

     nerTagDF = DataFrame(clean_chunkedd, columns = ['Word','Classification']) 
     nerTagDF['File_Name'] = fileName 
     nerTagDF['Line Key'] = str(i) 
     ne = ne.append(nerTagDF) 

oFile.close() 
midFile.close() 

请彻ck的代码...希望它能解决你的问题...

0

请清理你的代码。看起来错误是错误消息之后的错误:

... 
chunked, pos = [], prev_tag=[], "" 
ERROR IS HERE!! 
       for i, word_pos in enumerate(ner_output): 
... 

为什么对于循环行如此过度缩进?它应该看起来像这样:

chunked, pos = [], prev_tag=[], "" 
# ERROR IS HERE!! 
for i, word_pos in enumerate(ner_output): 
    # and then pick it up at this indentation 

虽然您的缩进不一致。看看这里,向着开头:

1 for word in keywordList:  
2  for i, line in enumerate(searchlines): 
3   if word in line: 
4   for l in searchlines[i-3:i+3]: oFile.write(fileName + delim + word + delim +str(i) + delim +str(l)) ## prints Unused MidFile for Reference 
5 ### Creates normal case line for Named Entity recognition & all Lower Case line for flagging keywords 
6   #normalCaseLine = str(searchlines[i-3] + searchlines[i-2] + searchlines[i-1] + searchlines[i] + searchlines[i+1] + searchlines[i+2] + searchlines[i+3]).replace('\n',' ') 
7   normalCaseLine = searchlines[ 

让我们通过这条线由行:第1行缩进了4个空格。这意味着从这里开始的每个缩进应该是四的倍数。第2行:还有四个空间,迄今为止非常好。第三行:从第二行缩进的只有两个空格:不好。应该是比第2行更加缩进的四个空格。第4行:再次,两个空格。而且你应该把它分成两行,甚至可以把它分成三行,并且在自己的行上加注释。 for(...):,然后oFile.write(...与四个空格缩进不同的行上。第6行和第7行看起来应该缩进,因为第4行很容易混淆。第5行,即使它是注释,应该进一步缩进以匹配上一行,除非上一行是for(...):行,在这种情况下,它应该缩进四位以上。

+0

为什么downvote? –

+0

我发现这很有用,不知道为什么投票。 – user3473269

+0

如果你发现它有用,请随时upvote,并接受答案,如果它解决了你的问题:) –

0

当你第一次使用Python时,通常会出现缩进错误。

我的建议是只使用制表符来缩进代码 或空格。 因为在编译时,python编译器无法处理两者的混合。

我没有检查你的代码,但它不可读。 您可能希望使用带有PEP8 Autoformat规则的编辑器或自己重新设置代码格式。

这里是你的代码的编译版本:

ne=pd.DataFrame() 

for word in keywordList:  
    for i, line in enumerate(searchlines): 
     if word in line: 
      for l in searchlines[i-3:i+3]: 
       oFile.write(fileName + delim + word + delim +str(i) + delim +str(l)) 
       ## prints Unused MidFile for Reference 
       ### Creates normal case line for Named Entity recognition & all Lower Case line for flagging keywords 
       #normalCaseLine = str(searchlines[i-3] + searchlines[i-2] + searchlines[i-1] + searchlines[i] + searchlines[i+1] + searchlines[i+2] + searchlines[i+3]).replace('\n',' ') 
       normalCaseLine = searchlines[i-3].rstrip('\n') + searchlines[i-2].rstrip('\n') + searchlines[i-1].rstrip('\n') + \ 
        searchlines[i].rstrip('\n') + searchlines[i+1].rstrip('\n') + searchlines[i+2].rstrip('\n') + \ 
        searchlines[i+3].rstrip('\n') 
       lowerCaseLine = normalCaseLine.lower() 
       result = dict((key, len(list(group))) for key, group in groupby(sorted(lowerCaseLine.split()))) 
       ### Get Detail Keywords 
       cleanResult = {word: result[word] for word in result if word in detailKeywordList} 
       cleanNormLine = normalCaseLine.replace('\x92s',' ').replace('\x92s',' ').replace('\x96',' ').replace('\x95',' ') 
       ### Enter here if we need to seperate words ex. Tech Keywords 

       ner_output = st.tag(str(cleanNormLine).split()) 
       chunked, pos = [], prev_tag=[], "" 
       for i, word_pos in enumerate(ner_output): 
        word, pos = word_pos 
        if pos in ['PERSON', 'ORGANIZATION', 'LOCATION','DATE','MONEY'] and pos == prev_tag: 
         chunked[-1]+=word_pos 
        else: 
         chunked.append(word_pos) 
         prev_tag = pos 

       clean_chunkedd = [tuple([" ".join(wordpos[::2]), wordpos[-1]]) if len(wordpos)!=2 else wordpos for wordpos in chunked] 

     ### Write Results to Combined file 
     midFile.write(fileName+'-'+str(i)+delim+word+delim+str(cleanNormLine)+delim+str(str(cleanResult).split(','))+'\n') 
     ### Create NER DataFramez 

     nerTagDF = DataFrame(clean_chunkedd, columns = ['Word','Classification']) 
     nerTagDF['File_Name'] = fileName 
     nerTagDF['Line Key'] = str(i) 
     ne = ne.append(nerTagDF) 

oFile.close() 
midFile.close() 
0

这里是固定的缩进你的代码。您应确保缩进在您的代码中始终保持一致,而不是空格和制表符的组合。

ne=pd.DataFrame() 

for word in keywordList:  
    for i, line in enumerate(searchlines): 
     if word in line: 
      for l in searchlines[i-3:i+3]: oFile.write(fileName + delim + word + delim +str(i) + delim +str(l)) ## prints Unused MidFile for Reference 
      ### Creates normal case line for Named Entity recognition & all Lower Case line for flagging keywords 
       #normalCaseLine = str(searchlines[i-3] + searchlines[i-2] + searchlines[i-1] + searchlines[i] + searchlines[i+1] + searchlines[i+2] + searchlines[i+3]).replace('\n',' ') 
      normalCaseLine = searchlines[i-3].rstrip('\n') + searchlines[i-2].rstrip('\n') + searchlines[i-1].rstrip('\n') + searchlines[i].rstrip('\n') + searchlines[i+1].rstrip('\n') + searchlines[i+2].rstrip('\n') + searchlines[i+3].rstrip('\n') 
      lowerCaseLine = normalCaseLine.lower() 
      result = dict((key, len(list(group))) for key, group in groupby(sorted(lowerCaseLine.split()))) 
      ### Get Detail Keywords 
      cleanResult = {word: result[word] for word in result if word in detailKeywordList} 
      cleanNormLine = normalCaseLine.replace('\x92s',' ').replace('\x92s',' ').replace('\x96',' ').replace('\x95',' ') 
      ### Enter here if we need to seperate words ex. Tech Keywords 

      ner_output = st.tag(str(cleanNormLine).split()) 
      chunked, pos = [], prev_tag=[], "" 

       for i, word_pos in enumerate(ner_output): 
        word, pos = word_pos 
        if pos in ['PERSON', 'ORGANIZATION', 'LOCATION','DATE','MONEY'] and pos == prev_tag: 
          chunked[-1]+=word_pos 
        else: 
           chunked.append(word_pos) 
           prev_tag = pos 

      clean_chunkedd = [tuple([" ".join(wordpos[::2]), wordpos[-1]]) if len(wordpos)!=2 else wordpos for wordpos in chunked] 

      ### Write Results to Combined file 
      midFile.write(fileName+'-'+str(i)+delim+word+delim+str(cleanNormLine)+delim+str(str(cleanResult).split(','))+'\n') 
      ### Create NER DataFramez 

      nerTagDF = DataFrame(clean_chunkedd, columns = ['Word','Classification']) 
      nerTagDF['File_Name'] = fileName 
      nerTagDF['Line Key'] = str(i) 
      ne = ne.append(nerTagDF) 

oFile.close() 
midFile.close()