如果函数有效则为True,如果函数给出错误则为false

问题描述 投票:1回答:2

在python(内置函数或其他东西)中是否有任何方法来检查函数执行是否因错误而失败或有效?并根据具体情况返回true或false

我期望发生的事例:

内置方法示例:qazxsw poi

iserror
python error-handling built-in
2个回答
1
投票

没有这样的功能。你无法构建一个能满足你要求的函数,因为当Python调用iserror(float('123')) #returns False, as no error on float('123') occurs iserror(float('as1f')) #returns True, as it is not possible to convert to float the string ('as1f') 时,iserror()float('123')表达式已被执行;如果在那里引发异常,float('as1f')永远不会被执行。

你必须委托调用函数:

iserror()

然后像这样使用它:

def iserror(func, *args, **kw):
    try:
        func(*args, **kw)
        return False
    except Exception:
        return True

然而,抓住所有错误并不是一个好主意。虽然上面的函数试图通过捕获iserror(float, '123') # False iserror(float, 'as1f') # True 来做正确的事情(从而避免捕获ExceptionSystemExit),但它会捕获KeyboardInterrupt,这表明你的内存不足,而不是你测试的函数的参数是错误的!

始终尝试捕捉特定的例外情况;您可以扩展MemoryError以采取特定的例外:

iserror()

然后只抓住def iserror(func, *args, **kw): exception = kw.pop('exception', Exception) try: func(*args, **kw) return False except exception: return True 来测试你的ValueError电话:

float()

这不再具有可读性。我只想坚持使用一个简单的内联iserror(float, '123', exception=ValueError) # False iserror(float, 'as1f', exception=ValueError) # True ,无论你想在哪里使用一个可以引发异常的函数调用,因为这样你就可以定制你对特定异常的响应,而不必重复自己来处理你得到的结果是一个错误:

try..except

0
投票

虽然对于一般情况没有这样的功能,但有一个可以解决您的特定问题:

while True:
    value = raw_input('Please give a number: ')
    try:
         value = int(value)
         break
    except ValueError:
         print "Sorry, {} is not a valid number, try again".format(value)

返回x = '123' x.isnumeric()

True

返回x = 'as1f' x.isnumeric()

© www.soinside.com 2019 - 2024. All rights reserved.