缩进错误没有意义 - Python
当我试图嵌套这个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()
您的for
循环没有嵌套在任何东西中。在Python中,使用缩进的一个地方是在某个范围内定义了一段代码,例如在while
或for
循环内,在if
语句中,或定义某个函数时。
您的for循环在chunked, pos = [], prev_tag=[], ""
之后缩进,这只是一个独立的语句。因此,您需要取消缩进循环,直到它与周围代码的缩进匹配。这可能是我可以说的最一般的方式。
一个额外的轻微标签空间错误消息
# -*- 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的代码...希望它能解决你的问题...
请清理你的代码。看起来错误是错误消息之后的错误:
...
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(...):
行,在这种情况下,它应该缩进四位以上。
当你第一次使用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()
这里是固定的缩进你的代码。您应确保缩进在您的代码中始终保持一致,而不是空格和制表符的组合。
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()
很抱歉,但你的代码是一个烂摊子,这是不必阅读所有的缩进不一致,而不是在同一深度的每一个控制点的线条清晰。例如立即:'在wordpress关键词列表中:对于i,在枚举行(searchlines)中为: 如果在一行中:'在第一个块缩进中有4个空格,但随后为2个空格,并且这贯穿整个其余的代码 – EdChum
是的,更不用说,这是缩进错误,而不是缩进:)只需将它重新写入/复制粘贴到新窗口/选项卡/文件中逐行。 – StefanK
每一层压痕应该是4个空格。看看这个部分,看起来它超过了4个,可能是8个或更多。 – mauve