Вызываете более подходящую ошибку после оператора try в Python? - PullRequest
1 голос
/ 30 сентября 2019

Я использую 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()

Это мой способ проиллюстрировать что-то на полностью вымышленном языке псевдопрограммирования, но вы понимаете. Как мне это сделать? Спасибо:))

1 Ответ

2 голосов
/ 30 сентября 2019

Пара вещей.

Сначала. Если вы хотите использовать исключение, вызовите другое из него.

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

Второе. Не скрывать исключения вслепую. Всегда будьте конкретны и убедитесь, что исключение, которое вы потребляете, возникает только тогда, когда вы ожидаете этого.

...