如果我定义了一个包含两个或多个参数的类:
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)
它将打印“错误的类型”,但是有没有一种方法可以让它同时返回引发异常的参数?我能得到如下输出:
“错误的类型‘2’”
什么?我试过print(e.args)、print(repr(e))和simply print(e),但是无效参数永远不会被打印出来。只是想知道这是否可能,谢谢。你知道吗
edit:它与一个自定义的异常类型一起工作,如果我单独列出每个被测试的参数-我还为int\u param和str\u param捕获了ValueError,所以我想看看是否可以将if语句压缩为:
#if params not right type:
raise TypeError
#if params contain invalid value:
raise ValueError
并且仍然让它返回导致错误的特定无效参数。我肯定会记住自定义的异常类型,以便将来分配作业;不幸的是,对于这一个,讲师将“raisetypeerror”和“raisevalueerror”作为满分的要求。不过,她并不要求返回无效的参数,这只是我想知道我是否能处理它。我最终得到了:
#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))
....
等等。如果有人能看到一个更干净的方法来做这件事(没有自定义异常类型),请让我知道!你知道吗
你可以自己破例:
然后:
以及:
另见proper way to declare custom exceptions in modern Python。你知道吗
也许您应该寻找
traceback
模块。你知道吗而不是
raise TypeError("wrong type")
把traceback.print_exc()
包装在try, except
里,看看这是不是你想要的。你知道吗相关问题 更多 >
编程相关推荐