【问题标题】:Python, MetaClasses, HTTPException, __init_subclass__ - TypeError: exceptions must derive from BaseExceptionPython、MetaClasses、HTTPException、__init_subclass__ - TypeError:异常必须从 BaseException 派生
【发布时间】:2021-05-05 15:10:48
【问题描述】:

谁能指点我如何解决我的问题:

from werkzeug.exceptions import HTTPException

class HTTPExceptions(HTTPException):
    subclasses = dict()

    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        cls.subclasses[f'{cls.__name__}'] = cls.__name__


class Error501(HTTPExceptions):
    code = 501

当我尝试运行时:

raise HTTPExceptions.subclasses['Error501']

我明白了

TypeError: exceptions must derive from BaseException

有人知道如何解决吗?

【问题讨论】:

  • cls.__name__ 存储类的名称。使用cls 来存储类本身。

标签: python class httpexception


【解决方案1】:

cls.__name__ 是一个字符串,因此您定义HTTPExceptions.subclasses 的方式是字符串到字符串的映射。我假设您的意图是:

cls.subclasses[f'{cls.__name__}'] = cls

运行时的结果

Traceback (most recent call last):
  File "D:/Dev/python/scratch/subclass_exception.py", line 13, in <module>
    raise HTTPExceptions.subclasses['Error501']
__main__.Error501

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多