• 技术文章 >Python技术 >Python高级

    Python中自定义异常的使用举例

    PythonPython2019-06-13 10:52:46原创4041
    通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。

    以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。

    在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。

    1

    2

    3

    class Networkerror(RuntimeError):

      def __init__(self, arg):

       self.args = arg

    在你定义以上类后,你可以触发该异常,如下所示:

    1

    2

    3

    4

    try:

      raise Networkerror("Bad hostname")

    except Networkerror,e:

      print e.args

    在下面这个例子中,默认的__init__()异常已被我们重写。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    >>> class MyError(Exception):

    ...   def __init__(self, value):

    ...     self.value = value

    ...   def __str__(self):

    ...     return repr(self.value)

    ...

    >>> try:

    ...   raise MyError(2*2)

    ... except MyError as e:

    ...   print 'My exception occurred, value:', e.value

    ...

    My exception occurred, value: 4

    >>> raise MyError, 'oops!'

    Traceback (most recent call last):

     File "<stdin>", line 1, in ?

    __main__.MyError: 'oops!'

    常见的做法是创建一个由该模块定义的异常基类和子类,创建特定的异常类不同的错误条件。

    我们通常定义的异常类,会让它比较简单,允许提取异常处理程序的错误信息,当创建一个异常模块的时候,常见的做法是创建一个由该模块定义的异常基类和子类,根据不同的错误条件,创建特定的异常类:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    class Error(Exception):

      """Base class for exceptions in this module."""

      pass

      

    class InputError(Error):

      """Exception raised for errors in the input.

      

      Attributes:

        expression -- input expression in which the error occurred

        message -- explanation of the error

      """

      

      def __init__(self, expression, message):

        self.expression = expression

        self.message = message

      

    class TransitionError(Error):

      """Raised when an operation attempts a state transition that's not

      allowed.

      

      Attributes:

        previous -- state at beginning of transition

        next -- attempted new state

        message -- explanation of why the specific transition is not allowed

      """

      

      def __init__(self, previous, next, message):

        self.previous = previous

        self.next = next

        self.message = message

    专题推荐:python
    上一篇:详解Python中的包和包管理工具 下一篇:巧用Python字典处理索引统计

    相关文章推荐

    • Python列表中extend和append有什么区别?• Python中无限循环有什么条件• Python脚本多种方法破解栅栏密码

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网