Python 处理带有错误的for循环

Python 处理带有错误的for循环,python,Python,我有一个for循环,其中有一个错误 try: for line in text: 'do stuff' except: pass 当错误发生时,python只会退出for循环。我不能让python忽略这个错误并继续循环。顺便说一句,这是一个文本文件,我正在循环行。我还应该指出,错误并不发生在do-stuff部分,而是发生在for循环中。坦白地说,我也不明白为什么会抛出错误,因为这行代码与其他行代码一样。我试着删除这一行,看看它是否只是一次性的,但下一行也有一个错

我有一个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行中有更多的代码错误。什么是
文本
?如果