所以,我创建了一个自定义异常,我想以两种不同的方式调用它(if / else语句和try / except语句)。这是自定义异常:
class CustomException(Exception):
def __init__(self, value=None, *args, **kwargs):
self.parameter = value
for key, value in kwargs.items():
setattr(self, key, value)
for key, value in self.__dict__.items():
print "%s => %s" % ( key, value )
def __str__(self):
return repr(self.parameter)
以下是我想要实现自定义异常的方法:
try:
if something:
#make an error
;lsdfj
else:
raise CustomException('this is my custom message', file='somefile.txt', var2='something')
except Exception, e:
raise CustomException(e)
我相信,我的问题有两个方面:
1:当NameError
块中出现的标准try/except
(由;lsdfj
引起)时,我想传递CustomExceptions
一些额外参数,例如'file' ,就像if/else
实现一样;我该怎么做?
2:当引发自定义异常时(从if / else语句为false),CustomExceptions类最终被调用两次,因为我在if / else块中引发它然后在{{{ 1}}部分。我不知道怎么解决这个问题。
所以,在上面的例子中,我想在except:
不为真时调用CustomException,并且我想在代码块中抛出标准异常时调用它...但是当前,{ {1}}评估为false,然后if-statement
将被提升两次......
所以我希望在if something:
条件的代码中单方面使用自定义异常,以及标准的python异常......
我知道这个解释很复杂,但我不知道怎么解释我在追求什么......任何帮助都会非常感激!提前谢谢!
答案 0 :(得分:2)
为了不引发异常两次,你应该只在try/except
statemnt周围包裹if
块,如下所示:
if something:
try:
#make an error
;fdsfas
except Exception, e:
raise CustomException(e.message, file='somefile.txt', var2='something')
else:
raise CustomException('this is my custom message', file='somefile.txt', var2='something')
为了传递自定义异常,您必须将参数提供给类的构造函数,就像在if/else
语句中一样。
答案 1 :(得分:1)
您可以在except
区块中使用:
if not isinstance(e, CustomException): raise CustomException(e)
修改强>
在sys.exc_info()
内的raise
之前except
将成功删除对该异常来源的追溯,即NameError
。