声明 None 类型异常

Declaring None type exception

我想为继承自异常 class 的 python 中的 NoneType 错误定义自定义异常 class。我希望下面的代码能为我做这样的事情,但没有成功。有什么办法吗?

    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

我想要 try except 块引发 NoneTypeException。有什么办法吗?

虽然您可以声明 一个异常来表示您想要的任何内容,但现有代码不会为您引发。具体来说,对 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')