Skip to main content
 首页 » 编程设计

python之返回参数在 Python 中抛出异常

2025年05月04日32zhwl

如果我定义了一个接受两个或更多参数的类:

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 .