对于只能调用一次的函数,我应该在python中引发什么样的标准异常

对于只能调用一次的函数,我应该在python中引发什么样的标准异常,python,exception,Python,Exception,我正在为我的模块创建一个init函数,我想在用户意外调用它两次时引发一些异常。我应该提出什么样的标准例外 Class A(object): has_init = False @classmethod def initialize_class(cls): if has_init: raise Exception('xxx') has_init = True A.initialize_class() A.initi

我正在为我的模块创建一个init函数,我想在用户意外调用它两次时引发一些异常。我应该提出什么样的标准例外

Class A(object):
    has_init = False

    @classmethod
    def initialize_class(cls):
        if has_init:
             raise Exception('xxx')
        has_init = True

A.initialize_class()
A.initialize_class() # should raise exception

您可能会引发运行时错误,但最好更改初始值设定项,以便在调用两次时不会造成损坏

这可能是您应该引发自定义异常而不是内置异常的情况。

是一个选项,但可能是最合适的,您可以引发AttributeError,如下所示:

class A(object):
    @classmethod
    def initialize_class(cls):
        del cls.initialize_class

A.initialize_class()
A.initialize_class()

虽然我个人会在导入时初始化模块内部的类,而不是让客户机代码来完成。如果初始化必须在导入时间之后处理,请考虑将第二个调用设为NOP,而不是引发异常。

您确定您不想要简单的单子配方或其他什么吗?如果CLS.HasuInIT和CLS.HasoInIt=真的不应该是这样吗?为什么不在适当的时间初始化该类,比如在创建之后?你应该只使用_uinit。