繁体   English   中英

无效的参数引发异常

[英]Invalid argument raise exception

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

class MyClass:
    def function(parameter):
        pass

parameter是一个模糊函数,可能引发任何异常中的1个或多个,例如:

parameter = pow("5", 5)

在调用函数后且函数可以执行其语句之前,将TypeError

据我了解,您想处理所引发的异常,并检查所引发的错误类型以进行进一步检查? 这是一种方法。

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并找出引发了哪些异常。

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

例如,如果您想验证“ i”是否为整数,请运行指令if(type(i) is int):

通过编辑:

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

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

像这样:

def foo(bar):
    pass

foo(1, 2)

您不会在函数中捕获它们,当然也不会在def foo(bar):行中捕获它们。

是错误的函数调用者 ,因此您可以在其中捕获异常:

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

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

如果要在函数内部捕获异常,则必须在该函数内部调用paramenter(我认为这是可以调用的):

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

例:

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

如果您确实需要在函数内部调用“ paramenter”。 否则,您应该在外部管理其行为,例如:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM