如果我已经定义了一个包含两个或更多参数的类:
class SomeObject:
def __init__(self, int_param, str_param):
#if parameters are wrong type:
raise TypeError("wrong type")
...
if (__name__ == "__main__"):
try:
invalid_obj = SomeObject('two', 'string')
print (invalid_obj)
except TypeError as e:
print (e)
它打印"错误的类型",但有没有办法让它也返回哪个参数引发异常?我可以得到输出:
"错误的类型'两个'"
?我尝试过打印(e.args),打印(repr(e)),然后简单地打印(e)但是无效的参数永远不会被打印出来。只是想知道这是否可行,谢谢。
编辑:它适用于自定义异常类型,如果我列出每个被单独测试的参数 - 我也同时捕获了int_param和str_param的ValueError,所以我想看看是否可以将if语句压缩为只是:
#if params not right type:
raise TypeError
#if params contain invalid value:
raise ValueError
仍然让它返回导致错误的特定无效参数。对于将来的任务,我绝对会考虑自定义异常类型;不幸的是,对于这一个,教练已经引发了TypeError"和#34;提出ValueError"作为满分的要求。她并不要求返回无效的参数,这只是我好奇,如果我能管理它。我最终得到了:
#if int_param not int:
raise TypeError("int_param {0} given is invalid type".format(int_param))
#if str_param not int:
raise TypeError("str_param {0} given is invalid type".format(str_param))
#if int_param is an invalid value:
raise ValueError("int_param {0} given is invalid value".format(int_param))
....
等等。如果有人能看到更简洁的方法(没有自定义的Exception类型),请告诉我!
答案 0 :(得分:3)
您可以自己制作例外:
class SomeObjectException(TypeError):
def __init__(self, msg, which):
TypeError.__init__(self, msg)
self.which = which
然后:
class SomeObject:
def __init__(self, int_param, str_param):
#if parameters are wrong type:
raise SomeObjectException("wrong type", int_param)
和
if (__name__ == "__main__"):
try:
invalid_obj = SomeObject('two', 'string')
print (invalid_obj)
except SomeObjectException as e:
print (e, e.which)
答案 1 :(得分:2)
class SomeObject:
def __init__(self, int_param, str_param):
if type(int_param) != int:
raise TypeError("int_param: wrong type")
if type(str_param) != str:
raise TypeError("str_param: wrong type")
答案 2 :(得分:0)
也许您应该寻找traceback
模块。
raise TypeError("wrong type")
中而不是traceback.print_exc()
换try, except
,看看你是否正在寻找。