【问题标题】:Raising more appropriate error after try statement in Python?在 Python 中的 try 语句后引发更合适的错误?
【发布时间】:2020-01-30 01:15:53
【问题描述】:

我为此使用了 openCV 的 cv2,但我对它产生的错误不满意。所以我想捕获错误,然后引发更合适的错误,以便程序员更好地了解问题所在:

try:
    cv2.imwrite(out_fn, img_arr, [jpg_q, 100, png_c, 9])
except:
    raise UnsupportedFileFormatError(out_fn)

但是这只会引发两个异常:

Traceback (most recent call last):
  File "/Users/admin/Documents/Studie/IN3110/assignment4/Blur/blur/funcs/blur.py", line 25, in blur_image
    cv2.imwrite(out_fn, img_arr, [jpg_q, 100, png_c, 9])
cv2.error: OpenCV(4.1.1) /Users/travis/build/skvark/opencv-python/opencv/modules/imgcodecs/src/loadsave.cpp:662: error: (-2:Unspecified error) could not find a writer for the specified extension in function 'imwrite_'


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/admin/Documents/Studie/IN3110/assignment4/Blur/blur/funcs/blur.py", line 27, in blur_image
    raise UnsupportedFileFormatError(out_fn)
blur.errors.errors.UnsupportedFileFormatError: Unsupported file ending: "kyk.jp"

我想做这样的事情:

if cv2.error as e:
    e.ignoreError()
    throw new appropriateError()

那是我用一种完全虚构的伪编程语言来说明某些东西的方式,但你明白了。我该怎么做呢?谢谢:))

【问题讨论】:

    标签: python exception error-handling try-catch raise


    【解决方案1】:

    几件事。

    首先。如果你想消费一个异常,就从它引发另一个。

    try:
        ...
    except ValueError as crap:
        raise AttributeError() from crap
    

    第二。 不要盲目隐藏异常。始终保持具体,并确保您使用的异常仅在您期望的时候发生。

    【讨论】:

    • 我喜欢这样。谢谢
    • 如果回答能解决您的问题,请将其标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 2021-03-31
    • 2023-02-13
    相关资源
    最近更新 更多