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

时间:2016-01-14 15:29:15

标签: python error-handling built-in

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

我期望发生的事例:

内置方法示例:iserror

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

2 个答案:

答案 0 :(得分:1)

没有这样的功能。您无法构建满足您要求的功能,因为当Python调用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

然而,抓住所有错误并不是一个好主意。虽然上述函数尝试通过捕获Exception来做正确的事情(从而避免捕获SystemExitKeyboardInterrupt),但它捕获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,只要你想使用一个可能引发异常的函数调用,因为这样你就可以定制你对特定异常的响应,而不必重复自己来处理你的结果。确定不会有错误:

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)

答案 1 :(得分:0)

虽然在一般情况下没有这种功能,但是有一种功能可以解决您的特定问题:

ArrayCollection

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

同时

True

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