Python 处理带有错误的for循环
我有一个for循环,其中有一个错误Python 处理带有错误的for循环,python,Python,我有一个for循环,其中有一个错误 try: for line in text: 'do stuff' except: pass 当错误发生时,python只会退出for循环。我不能让python忽略这个错误并继续循环。顺便说一句,这是一个文本文件,我正在循环行。我还应该指出,错误并不发生在do-stuff部分,而是发生在for循环中。坦白地说,我也不明白为什么会抛出错误,因为这行代码与其他行代码一样。我试着删除这一行,看看它是否只是一次性的,但下一行也有一个错
try:
for line in text:
'do stuff'
except:
pass
当错误发生时,python只会退出for循环。我不能让python忽略这个错误并继续循环。顺便说一句,这是一个文本文件,我正在循环行。我还应该指出,错误并不发生在do-stuff部分,而是发生在for循环中。坦白地说,我也不明白为什么会抛出错误,因为这行代码与其他行代码一样。我试着删除这一行,看看它是否只是一次性的,但下一行也有一个错误,这让我相信我不能只删除不好的行。错误的名称是unicodedecodeerror
以下是文本:
我想把“抽象”一词后面的所有单词列一个清单
这是实际的代码
打开(旧文件的完整路径)为旧:
这是完整的回溯
Traceback (most recent call last):
File "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py", line 1596, in <module>
globals = debugger.run(setup['file'], None, None, is_module)
File "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py", line 1023, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "/Applications/PyCharm CE.app/Contents/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/Users/kylefoley/PycharmProjects/inference_engine2/inference2/Proofs/z_natural_language.py", line 25, in <module>
for i, line in enumerate(old):
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 764: invalid continuation byte
We've got an error while stopping in post-mortem: <class 'KeyboardInterrupt'>
回溯(最近一次呼叫最后一次):
文件“/Applications/PyCharm CE.app/Contents/helpers/pydev/pydev.py”,第1596行,在
globals=debugger.run(setup['file'],None,None,is_模块)
文件“/Applications/PyCharm CE.app/Contents/helpers/pydev/pydev.py”,第1023行,运行中
pydev_imports.execfile(文件、全局、局部)#执行脚本
文件“/Applications/PyCharm CE.app/Contents/helpers/pydev/_pydev_imps/_pydev_execfile.py”,execfile中第18行
exec(编译(内容+“\n”,文件,'exec'),全局,loc)
文件“/Users/kylefoley/PycharmProjects/inference_engine2/inference2/Proofs/z_natural_language.py”,第25行,在
对于i,枚举中的行(旧):
文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py”,第321行,在decode中
(结果,消耗)=自身缓冲区解码(数据,自身错误,最终)
UnicodeDecodeError:“utf-8”编解码器无法解码位置764中的字节0xe9:无效的连续字节
我们在验尸时发现一个错误:
您的问题在于文件编码。将其更改为拉丁语-1
,如下所示:
objects_of_abstract = list()
with open('abstract.txt', encoding="latin-1") as old:
for i, line in enumerate(old):
if "abstract," not in line:
b = line.find('abstract')
line2 = line[b+9:]
list1 = line2.split()
list1[0] = list1[0].replace(",","")
list1[0] = list1[0].replace(".", "")
try:
if list1[0][-1] == "s":
list1[0] = list1[0][:-1]
except:
pass
objects_of_abstract.append(list1[0])
你的问题是你的文件编码。将其更改为
拉丁语-1
,如下所示:
objects_of_abstract = list()
with open('abstract.txt', encoding="latin-1") as old:
for i, line in enumerate(old):
if "abstract," not in line:
b = line.find('abstract')
line2 = line[b+9:]
list1 = line2.split()
list1[0] = list1[0].replace(",","")
list1[0] = list1[0].replace(".", "")
try:
if list1[0][-1] == "s":
list1[0] = list1[0][:-1]
except:
pass
objects_of_abstract.append(list1[0])
这应该有助于解决第一个问题(保持循环进行): 在python try…except块中,它将尝试运行
try
块中的all代码,如果抛出错误,它将停止并移动到except
在您的情况下,您可以将的移动到try之外,这样,如果发生错误,它将在之外的中处理,然后继续下一次迭代:
for line in text:
try:
'do stuff'
except: # if 'do stuff' throws an error, we just go to the next iteration
pass
这应该有助于解决第一个问题(保持循环进行): 在python try…except块中,它将尝试运行
try
块中的all代码,如果抛出错误,它将停止并移动到except
在您的情况下,您可以将的移动到try之外,这样,如果发生错误,它将在之外的中处理,然后继续下一次迭代:
for line in text:
try:
'do stuff'
except: # if 'do stuff' throws an error, we just go to the next iteration
pass
必须将try/except块保持在循环内部
for line in text:
try:
# your Operation
except:
pass
必须将try/except块保持在循环内部
for line in text:
try:
# your Operation
except:
pass
您可以在代码的某个地方打开该文件。
open
功能中有两个参数与您的问题有关:
encoding=None
:encoding是用于解码或编码文件的编码的名称。这只能在文本模式下使用。默认编码依赖于平台(无论locale.getpreferredencoding()返回什么),但是可以使用Python支持的任何编码。有关支持的编码列表,请参见编解码器模块
errors=None
:errors是一个可选字符串,指定如何处理编码和解码错误–不能在二进制模式下使用。有多种标准错误处理程序可用,但任何已向编解码器注册的错误处理名称。register_error()也有效
[还有更多;请参阅标准库文档]
由于您没有显示如何打开文件,因此我无法具体告诉您出了什么问题。但是错误消息表明这是一个编码错误,您应该首先查看它。在代码的某个地方打开文件。
open
功能中有两个参数与您的问题有关:
encoding=None
:encoding是用于解码或编码文件的编码的名称。这只能在文本模式下使用。默认编码依赖于平台(无论locale.getpreferredencoding()返回什么),但是可以使用Python支持的任何编码。有关支持的编码列表,请参见编解码器模块
errors=None
:errors是一个可选字符串,指定如何处理编码和解码错误–不能在二进制模式下使用。有多种标准错误处理程序可用,但任何已向编解码器注册的错误处理名称。register_error()也有效
[还有更多;请参阅标准库文档]
由于您没有显示如何打开文件,因此我无法具体告诉您出了什么问题。但是错误消息表明这是一个编码错误,您应该首先查看它。一个可能的答案是使用 标准库中的模块:
from contextlib import suppress
with suppress(UnicodeDecodeError): #might have to some some work here to get the error right
for i, line in enumerate(old):
.....
正如文档中所说,如果可能的话,最好尝试解决您的问题,而不是默默地忽略它。一个可能的答案是使用 标准库中的模块:
from contextlib import suppress
with suppress(UnicodeDecodeError): #might have to some some work here to get the error right
for i, line in enumerate(old):
.....
正如文档中所说,如果可能的话,最好尝试解决您的问题,而不是默默地忽略它。我不能这样做,因为for行中有更多的代码错误。什么是
文本
?如果