实现python异常
发布时间:2020-12-20 12:25:23 所属栏目:Python 来源:网络整理
导读:我在程序中实现异常系统时遇到一些问题. 我找到了以下代码,我试图用于我的程序: class InvalidProgramStateException(Exception): def __init__(self,expr,msg): self.expr = expr self.msg = msg 我认为msg必须是要显示的字符串消息,但是当我想要引发此异
我在程序中实现异常系统时遇到一些问题.
我找到了以下代码,我试图用于我的程序: 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) 由于您的应用程序似乎不需要它,因此只需删除不需要的参数即可. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |