如果代码块产生错误,请执行x;如果没有,做y(Python)

时间:2015-06-15 20:05:27

标签: python python-3.x

在Python中,是否可以在代码块中测试错误,如果出现错误,可以执行某些操作;如果没有,还做别的什么?

伪代码看起来像

checkError:
    print("foobar" + 123)
succeed:
    print("The block of code works!")
fail:
    print("The block of code does not work!")

这当然会每次都失败;这种技术将与变量一起使用。

另一种解决方法可能是拥有一个独立的代码块,这样如果在那里发生错误,其他代码就会继续:

global example
example = "failure"
isolate:
    print("foobar" + 123)
    example = "success"

if example == "success":
    print("The block of code worked without errors.")
elif example == "failure":
    print("The block of code had an error and stopped prematurely")
else:
    print("???")

同样,每次都会失败,并且在应用程序中,它将与变量一起使用。

3 个答案:

答案 0 :(得分:3)

听起来像是在寻找exceptions

https://docs.python.org/2/tutorial/errors.html

# checkError: becomes 
try
    # some test
    if x > 0:
      raise AssertionError("Something failed...")
    print("The block of code works!")
except:
    print("The block of code does not work!")

像这样的东西

答案 1 :(得分:1)

你想要一个try / except并捕获可能发生的任何特定错误/错误:

def test(a,b):
    try:
        res = a/b
        print(res)
        print("The block of code works!")
    except ZeroDivisionError:
        print("The block of code does not work!")

如果没有异常,您将看到res和“代码块工作!”,如果有,您将看到“代码块不起作用!”:

In [26]: test(10,2)
5
The block of code works!

In [27]: test(10,0)
The block of code does not work!

你不想捕捉每一个异常,只捕捉你期望在期望块中发生的任何事情,一个裸露的,除非通常不是一个好主意。

您可以捕获多个例外:

def test(a,b):
    try:
        res = a/b
        print(res)
        print("The block of code works!")
    except (ZeroDivisionError, TypeError):
        print("The block of code does not work!")

In [34]: test(10,2)
5
The block of code works!

In [35]: test(10,0) # ZeroDivisionError
The block of code does not work!

In [36]: test(10,"foo") # TypeError
The block of code does not work!

答案 2 :(得分:0)

根据您正在做的事情,您可能会查看try / except块。您的代码看起来像这样:

try:
    do_something()
    handle_success()
except:
    handle_failure()

在这种情况下,handle_failure()调用期间抛出异常时会调用do_something()

如果您的代码没有抛出异常,则需要返回一个值,该值的结果可以在运行时检查。布尔返回值可能如下所示:

if do_something():
    success()
else:
    failure()

根据您的函数返回的内容,if / else可能看起来不同。