无效的参数引发异常

时间:2012-01-26 22:52:46

标签: python class exception parameters

我如何使用tryexcept测试我的参数是否会引发异常而不实际提升它?

class MyClass:
    def function(parameter):
        pass

parameter是一个含糊不清的函数,可能会引发任何异常中的一个或多个,例如:

parameter = pow("5", 5)

一旦调用函数并且函数可以执行其语句之前,就会引发TypeError

4 个答案:

答案 0 :(得分:1)

根据我的理解,您希望处理引发的异常,并检查为进一步检查提出的错误类型?这是一种方法。

class Foo(object):
    def find_errors(arg):
        errors = []
        try:
            # do something
        except TypeError as e:
            errors.append(e)
            # handle exception somehow
        except ValueError as e:
            errors.append(e)
            # handle exception somehow
        # and so on ...
        finally:
            pass #something here

        return errors, ans

现在,您可以检查errors并找出已经引发的异常。

答案 1 :(得分:0)

如果您希望参数为特定类型,则可以使用type(paramter) is parametertype

例如,如果您要验证'i'是否为int,请运行说明if(type(i) is int):

通过编辑:

try:
    pow("5",5)
    return 0
except Exception, err:
    sys.stderr.write('ERROR: %s\n' % str(err))
    return 1

答案 2 :(得分:0)

也许您的意思是如何捕获由无效函数调用引起的TypeError异常?

像这样:

def foo(bar):
    pass

foo(1, 2)

你没有在函数中捕获它们,当然也没有在def foo(bar):行中捕获它们。

该函数的调用者发出错误,因此您可以捕获异常:

try:
    foo(1, 2)
except TypeError:
    print('call failed')

答案 3 :(得分:0)

在对另一个答案的评论中,你说:" parameter是另一个功能;例如:parameter = pow("5", 5)引发TypeError,但它可以是任何类型的函数和任何类型的异常。"

如果你想在你的函数中捕获exeption,你必须在该函数内调用参数(我假设它是可调用的):

def function(callable, args=()):
    try:
        callable(*args)
    except:
        print('Ops!')

示例:

>>> function(pow, args=("5", 5))
Ops!

如果你真的需要打电话给你的"参数"在功能里面。否则你应该在外面管理它的行为,可能是这样的:

>>> try:
...     param = pow('5', 5)
... except:
...     param = 10
... 
>>> param
10
>>> function(param)

在此示例中,引发异常的行为是pow而不是function,因此将两个不同的调用分开并用try-except语句换行是一种很好的做法可能失败的代码。