如果我定义了一个接受两个或更多参数的类:
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)
它会打印“错误的类型”,但有没有办法让它也返回引发异常的参数?我可以将输出设为:
“错误的类型‘二’”
?我尝试过 print (e.args)、print (repr(e)) 和简单的 print(e),但无效参数永远不会被打印出来。只是想知道这是否可能,谢谢。
编辑:它适用于自定义异常类型,如果我列出每个单独测试的参数 - 我也有 ValueError 捕获 int_param 和 str_param,所以我想看看我是否可以将 if 语句压缩为只是:
#if params not right type:
raise TypeError
#if params contain invalid value:
raise ValueError
并且仍然让它返回导致错误的特定无效参数。我一定会在以后的任务中牢记自定义异常类型;不幸的是,对于这个,讲师将“提高类型错误”和“提高值(value)错误”作为满分要求。不过,她并不要求返回无效参数,这只是我好奇我是否可以处理它。我最终得到了:
#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):
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)
另见 proper way to declare custom exceptions in modern Python .
