【问题标题】:Declaring None type exception声明无类型异常
【发布时间】:2023-04-01 18:24:01
【问题描述】:

我想为继承自 Exception 类的 python 中的 NoneType 错误定义一个自定义 Exception 类。我希望下面的代码能为我做这样的事情,但没有成功。有没有办法做到这一点?

    class NoneTypeException(Exception):
        pass

    try:
         image = cv2.imread("/path/")
         gray = cv2.cvtColor(image.copy(), cv2.COLOR_BGR2GRAY) #exception should be raised here
         ...

    except NoneTypeException:
        raise NoneTypeException("Image not found") # and should be caught here

我想尝试除块引发 NoneTypeException。有办法吗?

【问题讨论】:

  • 如果cv2.imread("/path/") 提高AttributError,那么你必须抓住AttributeError。您不能定义由其他代码引发的异常。但是,如果你真的想的话,你可以抓住AttributError 并在那个除了块中提高NoneTypeException
  • 错误必须由 something 引发,而ˋcv.imreadˋ 不知道您的新异常。您为什么希望在这里提出您的异常?
  • @TedKleinBergman 确实如此;但是我可能提前有一些其他属性错误,例如不正确的函数名称(属性错误可能有很多原因),所以我想将错误设置为NoneType,IncorrectFunction ...
  • @MisterMiyagi 哦,你是对的;我只是举个例子。案例是 cv2.cvtColor,如果图像为无,则会引发异常。我会改一下问题。谢谢。
  • cv2.cvtColor 函数不知道您的自定义异常 - 您为什么希望它引发您的异常?

标签: python-3.x opencv exception nonetype


【解决方案1】:

虽然您可以声明一个异常来表示您想要的任何内容,但现有代码不会为您引发它。具体来说,None 上的操作已经引发了一些明确定义的错误,您无法替换它们。严格来说,您无法获得想要的行为。


如果您知道某段代码易受None 值的影响,您可以捕获通用异常并引发特定异常。这取决于None 是您可能获得的唯一虚假值的假设:

class NoneTypeException(Exception):
    pass

try:
     image = cv2.imread("/path/")
     gray = cv2.cvtColor(image.copy(), cv2.COLOR_BGR2GRAY)
     ...
except AttributeError as err:  # handle generic exception from action on ``None``
    raise NoneTypeException("Image not found")

请注意,您很少应该这样做 - None 值是一种症状,而不是错误的原因。提出FileNotFoundError会更合适。


由于None 可以在任何地方触发错误,因此更容易从源头上进行防范。使用None 检查身份非常便宜:

try:
    image = cv2.imread("/path/")
    if image is None:  # verify value immediately
        raise NoneTypeException()
    # safely work with image
    gray = cv2.cvtColor(image.copy(), cv2.COLOR_BGR2GRAY)
    ...
except NoneTypeException:
    raise FileNotFoundError('image not found')

【讨论】:

    猜你喜欢
    • 2018-10-03
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2021-05-24
    • 2014-08-02
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多