Python 在处理文件时查找异常的位置

Python 在处理文件时查找异常的位置,python,exception,exception-handling,Python,Exception,Exception Handling,我正在用Python处理一些半结构化文档,我有一些代码可以将文件读入元组,循环每一行并执行一个函数。有没有办法在处理过的文件中找到遇到错误的确切行 c = tuple(open("file", 'r')) for element in c: if (condition is met): do something else: do something else 结果应该是: 错误:“文件”的第#行 应该有助于: for line, element

我正在用Python处理一些半结构化文档,我有一些代码可以将文件读入元组,循环每一行并执行一个函数。有没有办法在处理过的文件中找到遇到错误的确切行

c = tuple(open("file", 'r'))

for element in c:
    if (condition is met):
        do something
    else:
        do something else
结果应该是:

错误:“文件”的第#行
应该有助于:

for line, element in enumerate(c):
    try:
        if (condition is met):
            do something
        else:
            do something else
    except Exception as e:
        print('got error {!r} on line {}'.format(e, line))
上面给出的错误如下:

got error OSError('oops!',) on line 4
虽然作为一种良好的做法,您通常会用您希望捕获的任何错误来替换
异常。

应该有帮助:

for line, element in enumerate(c):
    try:
        if (condition is met):
            do something
        else:
            do something else
    except Exception as e:
        print('got error {!r} on line {}'.format(e, line))
上面给出的错误如下:

got error OSError('oops!',) on line 4

虽然作为一种好的做法,您通常会用您希望捕获的任何错误替换
异常

一般来说,在读取文件时使用
with
关键字是一种好的做法,尤其是当您预期会发生异常时。您还可以
枚举
来计算行数:


打开(文件名)为f时:
对于行数,枚举(f)中的行:
尝试:
如果(满足条件):
做点什么
其他:
做点别的
除例外情况外:
打印('Error:在文件的第{:d}行中)。格式(第_num行))

如果您知道所期望的特定异常,最好不要使用
异常
,因为它将捕获所有异常,即使是您不期望的异常。

一般来说,在读取文件时,最好使用
with
关键字,尤其是当您期望发生异常时。您还可以
枚举
来计算行数:


打开(文件名)为f时:
对于行数,枚举(f)中的行:
尝试:
如果(满足条件):
做点什么
其他:
做点别的
除例外情况外:
打印('Error:在文件的第{:d}行中)。格式(第_num行))

如果您知道所期望的特定异常,最好不要使用
Exception
,因为它将捕获所有异常,即使是您不期望的异常。

好吧,您正在文件的行上循环,因此您可以对enumerate(c,start=1)中的行编号执行
异常不携带局部变量,更不用说像
TextIOWrapper
内部的其他状态了,更不用说像行号一样根本不存在的内部状态了。但是你可以很容易地自己添加它。好吧,你正在文件的行上循环,这样你就可以对枚举(c,start=1)中的行数执行
异常不携带局部变量,更不用说像
TextIOWrapper
的内部状态了,更不用说像行号一样不存在的内部状态了。但是您可以自己轻松地添加它。我可以使用
{!r}
或者手动将异常类型抛出到错误中。当您收到一条关于异常的日志消息并且不得不猜测它是什么类型时,这是令人沮丧的。(除此之外,答案很好。)我要么使用
{!r}
,要么手动将异常类型抛出到错误中。当您收到一条关于异常的日志消息并且不得不猜测它是什么类型时,这是令人沮丧的。(除此之外,答案很好。)