代码之家  ›  专栏  ›  技术社区  ›  Eric O. Lebigot

在Python中引发一个内置异常,但使用不同的消息,可以吗?

  •  22
  • Eric O. Lebigot  · 技术社区  · 15 年前

    built-in exception 使用自定义文本?或者提出 built-in warning 还有自定义文本吗?

    异常值错误:当内置操作或函数收到参数()时引发

    只有

    在实践中,我理解创建从ValueError或exception继承的exception类是安全的。但不这样做,直接引发ValueError(“自定义文本”)可以吗?

    由于ValueError是内置的,与自定义异常类型(类似于“ValueErrorSpecificModule”,这不是标准的)相比,引发ValueError(带有自定义文本)允许用户快速查看所涉及的问题类型。

    3 回复  |  直到 15 年前
        1
  •  28
  •   mithrandi    15 年前

    这样做在操作上没有什么错:

    raise ValueError("invalid input encoding")
    

    事实上,我在编写一些代码的第一段时经常这样做。这样做的主要问题是,代码的客户端很难精确地处理异常;为了捕获特定的异常,他们必须对捕获到的异常对象进行字符串匹配,这显然是脆弱而乏味的。因此,最好引入您自己的ValueError子类;这仍然可以作为ValueError捕获,但也可以作为更具体的异常类捕获。

    一般的经验法则是,只要您有如下代码:

    raise ValueError('some problem: %s' % value)
    

    您可能应该将其替换为以下内容:

    class SomeProblem(ValueError):
        """
        Raised to signal a problem with the specified value.
        """
    # ...
    raise SomeProblem(value)
    

    您可以说异常类型指定了 出错,而消息/属性指定 怎样

        2
  •  3
  •   John La Rooy    15 年前

    很好。

    但是,您可能希望创建自己的子类来帮助区分内置异常

    dict ,您可以出于通常的原因引发KeyError,但是如果KeyError确实来自您在实现中使用的基础dict,该怎么办呢。

    提高KeyError的子类可以更容易地看到实现中存在错误,而不是密钥不在对象中

        3
  •  3
  •   Christopher Bruns    15 年前

    page you linked

    exception TypeError: Raised when an operation or function is applied to an object of inappropriate type. The associated value is a string giving details about the type mismatch.
    

    也许有人看到了你的问题,并且已经修复了文档。
    编辑: 看起来您可能已经插入了的文档 ValueError TypeError