Python 如果子模块中发生异常,如何停止主模块的执行

Python 如果子模块中发生异常,如何停止主模块的执行,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,这里有一个情况,我有一个主模块,它调用许多子模块,这些子模块反过来调用子模块及其方法 例如: 主要模块: import submodule1 import submodule2 var1=submodule1.test(2,0) var2=submodule2.verify(2,"zero") 子模块1: import blah def test(x,y): try: return x/y except: #some code to print

这里有一个情况,我有一个主模块,它调用许多子模块,这些子模块反过来调用子模块及其方法

例如:

主要模块:

import submodule1
import submodule2

var1=submodule1.test(2,0)
var2=submodule2.verify(2,"zero")
子模块1:

import blah

def test(x,y):
    try:
       return x/y
    except:
       #some code to print the error to log file
       #some code to determine if this is a critical error
子模块2:

import blah

def verify(x,y):
    try:
       return x*y
    except:
       #some code to print the error to log file
       #some code to determine if this is a critical error
现在,在上面的例子中,对方法“submodule1.test(2,0)”的第一次调用将抛出一个异常,该异常被记录到日志文件中,然后我尝试确定错误是否严重。如果这是一个严重错误,我想停止执行并关闭所有文件、组件、模块等(基本上是清理)

使用上述代码,控制返回到主模块,执行继续到下一行

我的主模块可能有许多方法或对象实例化。我不想检查每个语句的条件


对如何实现这一目标有何建议?谢谢大家!

所以这里最好的方法就是让异常传播到主模块

try:
    # Code
except:
    # Print
    if is_critical():
        raise  # This will re-raise the exception you just caught.

如果是严重错误,只需使用多种可用方法之一将其消除,如
sys.exit(-1)
。或者如果是严重错误,只需
raise
并让其冒泡。您可以在最外层的调用中使用一个
catch
,执行它应该执行的操作(如退出或重新启动或其他操作)sys.exit()可能不会关闭我打开的所有文件(如日志文件或输入表),而且我建立的任何selenium连接也可能不会关闭,对吗?@ArunPadmanabhan:
sys.exit()
将终止该过程,当该过程发生时,操作系统将关闭所有文件和连接。(实际上,它会引发一个
SystemExit
异常,您可以捕获该异常,它会导致
中带有
块的任何文件被关闭,任何
最终执行
代码,等等。但如果进程正在结束,您不需要关闭文件,除非您关心缓冲区的内容。)