当前位置: 首页 > 面试题库 >

实现python异常

微生阳平
2023-03-14
问题内容

我在程序中实现异常系统时遇到一些问题。我在某处找到了我要用于程序的以下代码:

class InvalidProgramStateException(Exception):
    def __init__(self, expr, msg):
        self.expr = expr
        self.msg = msg

我认为msg必须是要显示的字符串消息,但是当我想引发此异常时如何填充“ expr”?我需要手写吗?

raise InvalidProgramStateException(what_here?, "there was an error")

问题答案:

您的自定义例外实际上根本不需要采用参数。如果您没有要封装在Exception中的任何特定错误消息或状态,则可以正常工作:

class MyException(Exception):
    pass

这将允许您的程序按类型捕获此异常的情况:

try:
    raise MyException()
except MyException:
    print "Doing something with MyException"
except:
    print "Some other error occurred... handling it differently"

如果您希望Exception具有一些有意义的字符串表示形式,或者具有可以为您的应用程序提供更多有关发生问题的详细信息的属性,则当您将其他参数传递给构造函数时。这些参数的数量,名称和类型并不是由Python预先定义的……它们可以是任何东西。只要确保提供一个自定义__str__或__unicode__方法,就可以提供有意义的文本描述:

class MyException(Exception):

    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return "MyException with %s" % self.msg

在引用示例的情况下,expr和msg参数特定于示例的虚构情况。关于如何使用它们的人为情况是:

def do_something(expr):
    if 'foo' in expr:
        raise InvalidProgramStateException(expr, "We don't allow foos here")
    return 5

user_input = 'foo bar'
try:
    do_something(user_input)
except InvalidProgramStateException, e:
    print "%s (using expression %s)" % (e.msg, e.expr)

由于似乎您的应用程序不需要它,因此只需删除不需要的参数即可。



 类似资料:
  • 这个问题要求解释在各种语言中如何在后台实现异常处理,但没有收到Python的任何回应。 我对Python特别感兴趣,因为Python通过EAFP原则“鼓励”异常抛出和捕捉。 我从其他SO答案中了解到,如果预计很少引发异常,try/catch块比if/etc语句更便宜,并且调用深度很重要,因为填充stacktrac很昂贵。这可能主要适用于所有编程语言。 python的特殊之处在于EAFP原则的高优先

  • 本文向大家介绍Python异常继承关系和自定义异常实现代码实例,包括了Python异常继承关系和自定义异常实现代码实例的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Python异常继承关系和自定义异常实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主要介绍 python 中异常的继承关系,及如何自定义异常 1. 异常的继

  • ID3算法python实现 数据集来源《机器学习实战》:https://github.com/apachecn/MachineLearning/blob/master/input/3.DecisionTree/lenses.txt young myope no reduced no lenses young myope no normal soft

  • 问题内容: 源字符串为: 这是我的模式: 但是,可以给我正确的结果: 只是转储一个空列表: 为什么不能给我期望的清单: 问题答案: 使用原始模式时,你无需两次逃脱。 输出: 同样,返回类型将是字符串列表。如果要将返回类型设置为整数和浮点数,请使用 输出:

  • 本文向大家介绍基于python traceback实现异常的获取与处理,包括了基于python traceback实现异常的获取与处理的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了基于python traceback实现异常的获取与处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1、traceback.print_exc() 2

  • 本文向大家介绍通过实例了解Python异常处理机制底层实现,包括了通过实例了解Python异常处理机制底层实现的使用技巧和注意事项,需要的朋友参考一下 要了解try except异常处理的用法,简单来说,当位于 try 块中的程序执行出现异常时,会将该种异常捕获,同时找到对应的 except 块处理该异常,那么这里就有一个问题,它是如何找到对应的 except 块的呢? 我们知道,一个 try 块

  • 本文向大家介绍Python通过select实现异步IO的方法,包括了Python通过select实现异步IO的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python通过select实现异步IO的方法。分享给大家供大家参考。具体如下: 在Python中使用select与poll比起在C中使用简单得多。select函数的参数是3个列表,包含整数文件描述符,或者带有可返回文件描述符的f

  • 本文向大家介绍Python通过poll实现异步IO的方法,包括了Python通过poll实现异步IO的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python通过poll实现异步IO的方法。分享给大家供大家参考。具体分析如下: 在使用poll()后返回轮询对象,该对象支持以下方法: pollObj.register(fd,[,eventmask])第一个参数是注册新的文件描述符fd