在Python中返回引发异常的参数

2024-04-27 03:01:27 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我定义了一个包含两个或多个参数的类:

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))
....

等等。如果有人能看到一个更干净的方法来做这件事(没有自定义异常类型),请让我知道!你知道吗


Tags: 类型参数ifparamistype错误not
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)

另见proper way to declare custom exceptions in modern Python。你知道吗

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")

也许您应该寻找traceback模块。你知道吗

而不是raise TypeError("wrong type")traceback.print_exc()包装在try, except里,看看这是不是你想要的。你知道吗

相关问题 更多 >