如果脚本失败则引发异常

Raise exception if script fails

我有一个 python 脚本,tutorial.py。我想从文件 test_tutorial.py 中 运行 这个脚本,它在我的 python 测试套件中。如果 tutorial.py 执行无任何异常,我希望测试通过;如果在执行 tutorial.py 期间出现任何异常,我希望测试失败。

这是我编写 test_tutorial.py 的方式,它不会 产生所需的行为:

from os import system
test_passes = False
try:
    system("python tutorial.py")
    test_passes = True
except:
    pass
assert test_passes

我发现上面的控制流程是不正确的:如果tutorial.py引发异常,那么断言行永远不会执行。

测试外部脚本是否引发异常的正确方法是什么?

from os import system
test_passes = False
try:
    system("python tutorial.py")
    test_passes = True
except:
    pass
finally:
    assert test_passes

这将解决您的问题。

Finally block is going to process if any error is raised. Check this for more information.It's usually using for file process if it's not with open() method, to see the file is safely closed.

如果没有错误s将是0:

from os import system
s=system("python tutorial.py")
assert  s == 0

或使用subprocess:

from subprocess import PIPE,Popen

s = Popen(["python" ,"tutorial.py"],stderr=PIPE)

_,err = s.communicate() # err  will be empty string if the program runs ok
assert not err

你的 try/except 没有从教程文件中捕获任何东西,你可以将所有内容移到它之外,它的行为是一样的:

from os import system
test_passes = False

s = system("python tutorial.py")
test_passes = True

assert test_passes