【问题标题】:custom warning handling class init error自定义警告处理类初始化错误
【发布时间】:2016-03-18 08:25:57
【问题描述】:

我想创建一个警告类,类似于异常。

基本上就是如下设置

import warnings


class customwarning(warnings):
    pass


class warning1(customwarning):
    def __init__(self, message):
        self.message = message

    def __str__(self):
        return repr(self.message)

但是当我尝试运行警告时,我收到以下错误:

TypeError: module.__init__() takes at most 2 arguments (3 given)

在这一行:

class customwarning(warnings):

在网上搜索时,我只找到了

 warnings.filterwarnings('ignore', '.*do not.*',)
 warnings.warn(Warning message')

但与课程无关。 如何创建一个像这样工作的类?

【问题讨论】:

  • 你正在尝试从模块继承,你想从内置的WarningUserWarning继承
  • 不明白我认为应该怎么做...
  • class customwarning(Warning):... 是从类继承的正确方法。我不明白你的评论,所以如果这不是你想要的,你能改写你的评论吗?
  • @JRichardSnape Warning 在 2.7 和 3.5 中都是内置的,不需要更改 import 语句(实际上 from warnings import Warning 会引发 ImportError)
  • 当我使用Warnings 时,我的问题中出现了上述错误。当我使用Warning(内置)时,我收到错误type object 'customwarning' has no attribute 'warning1' 。所以我没有得到结果喷气机。

标签: python python-3.x warnings


【解决方案1】:

您应该做的第一件事是区分Warning 类和warnings 类的作用。 Warning 类是您要扩展以创建 customwarning 类的基类,而 warnings 类用于控制警告发出后的处理方式即它是否被压制或显示。这两个是不同的东西,本质上你应该在你的代码 sn-p 中使用它们。 试试:

import warnings


class customwarning(Warning):
    pass


class warning1(customwarning):
    def __init__(self, message):
        self.message = message

    def __str__(self):
        return repr(self.message)


warnings.warn('message',warning1)

代码中的最后一行是代码运行后将向终端呈现警告的内容。 'message' 字符串是第一个参数,它在初始化后传递给 warning1。 dunder 方法str 中表示的内容就是将要显示的内容。要从warnings 类更改消息的格式,您可以使用它的.formatwarning() 方法。 要了解有关warnings 以及如何使用它的更多信息,请转到here 您也可以不使用双重继承,只需从 Warning 类继承一次。

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 2021-12-10
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多