如何在文件中捕获异常而不会破坏Python脚本的执行



我正在通过包含数百万行的CSV文件进行解析。例如

id, item_id,..,..,..
40638242,896898,..,42,...
40638242,896898,..,42,..

我在脚本中使用了其他人SDK的功能,问题是由于SDK函数提出的异常,我的脚本正在失败。我不知道这些例外,这就是为什么在我的脚本失败之前无法处理它们!

因此,为了规避此问题,我使用Python的记录功能来记录这些错误,还创建了一个单独的CSV文件,以捕获'id','item_id'和其他信息以及列的错误以及其他信息。此CSV文件。我的代码:

with open(prefix + 'cv2_error.csv', 'w+') as cv2_error_w, 
     open(prefix + 'ff_err.csv', 'w+') as ff_w:
    ff_err = csv.writer(ff_w, delimiter=',')
    for row in csv_reader:
        ca = row[3]  # age
        try:
            img = cv2.imread(path, 1)
        except cv2.error as cv_err:
            cv2_err_capture.writerow([row[0], row[1], path, cv_err])
            continue
        try:
            bb, pts, cp = frr.ff(...)
        except Exception:
            logger.exception("Issue with ff_err ")
            ff_err.writerow([row[0], row[1], path, Exception])
            continue
        ...
    ...
...

现在,我的脚本永远不会失败!它一直在显示错误!例如:

base_module.py:67: UserWarning: Data provided by label_shapes don't match names specified by label_names ([] vs. ['mae_label'])
  warnings.warn(msg)
Traceback (most recent call last):
ValueError: negative dimensions are not allowed

ValueError: could not broadcast input array from shape (0,423,3) into shape (354,423,3)

cv2.error: OpenCV(3.4.3) /io/opencv/modules/imgproc/src/resize.cpp:4044: error: (-215:Assertion failed) !ssize.empty() in function 'resize'

但是我缺少在我的fff.csv和cv2_error.csv文件中捕获的例外!由于我可以看到其他功能有效,但是这两个脚本没有打印。关于我做错了什么的建议?

您必须捕获异常实例(as e(并将其转换为字符串(str(e)(:

try:
    bb, pts, cp = frr.ff(...)
except Exception as e:
    logger.exception("Issue with ff_err: " + str(e))
    ff_err.writerow([row[0], row[1], path, str(e))
    continue

最新更新