如何在Python中通过多个异常退出

如何在Python中通过多个异常退出,python,exception,exit,Python,Exception,Exit,我遇到了一个问题,在出现异常后,我实际上无法退出我的程序。上面是我的代码示例 基本上,我所做的是将函数嵌套在其他函数中,因为这个程序需要按特定顺序执行几件事情,所以我从顶部开始,检查函数是否正确执行,如果正确,则转到下一个函数 我的问题是例外。每次引发异常时,当我告诉程序退出时,程序不会退出。相反,它会引发它应该引发的异常,然后上升一个级别并引发该异常,依此类推,直到它最终退出 我到底做错了什么 这是我嵌套函数的方式吗 无论sys.exit(1)行写入何处,是否有办法强制程序退出?sys.exi

我遇到了一个问题,在出现异常后,我实际上无法退出我的程序。上面是我的代码示例

基本上,我所做的是将函数嵌套在其他函数中,因为这个程序需要按特定顺序执行几件事情,所以我从顶部开始,检查函数是否正确执行,如果正确,则转到下一个函数

我的问题是例外。每次引发异常时,当我告诉程序退出时,程序不会退出。相反,它会引发它应该引发的异常,然后上升一个级别并引发该异常,依此类推,直到它最终退出

我到底做错了什么

这是我嵌套函数的方式吗


无论
sys.exit(1)
行写入何处,是否有办法强制程序退出?

sys.exit
通过引发
SystemExit
异常来工作。因为您有一个裸露的
except
而不是except
SomeHypotheticalExceptionType
,所以您的异常处理实际上是捕获
SystemExit


要使
sys.exit
得到尊重,最小的更改是
,例外情况除外:
,但这不是最好的做法。最好只捕获您希望引发的异常并知道如何处理。这是python中普遍接受的最佳实践,它有助于避免掩盖各种讨厌的错误,否则这些错误会被忽略(想象一下,如果您拼错了一个变量的名称,您肯定希望
namererror
告诉您您做错了什么,这样您就可以修复它).

您是否尝试过使用
raise
sys.exit
通过引发
SystemExit
异常来工作。。。因为您有一个裸露的
except
而不是
exceptiontype
,所以异常处理实际上是捕获
系统出口。要使
sys.exit
得到尊重,最小的更改是
,例外情况除外:…
,但最好只捕获您希望引发并希望捕获的异常。@mgilson请不要在评论中发布答案。请将其作为答案发布,谢谢。当你这样做的时候,我会投赞成票。如果你提供一个
def directories():
    print("Creating STRaitRazor directories...")
    try:
        os.chdir("C:\\")
        os.mkdir("STRaitRazor")
        os.chdir("STRaitRazor")
        os.mkdir("Analysis")
        os.chdir("Analysis")
        os.mkdir("config")
        os.mkdir("fastq")
        os.chdir("..")
        os.mkdir("bin")
        os.chdir("bin")
        print("STRaitRazor directories successfully created")
        Sevenzip()
    except:
        print("Could not create directories. Do directories already exist?")
        response = input("Y/N\n")
        if response == "Y" or response == "y":
            Sevenzip()
        elif response == "N" or response == "n":
            print("Unexpected exception occurred, aborting...")
            time.sleep(5)
            sys.exit(1)

def Sevenzip():
    os.chdir("C:\\STRaitRazor\\bin")
    try:
        print("Downloading 7zip into C:\\STRaitRazor\\bin...")
        url = "https://www.7-zip.org/a/7z1900.exe"
        urllib.request.urlretrieve(url, "7zip.exe")
        path = "C:/STRaitRazor/bin/"
        subprocess.call("7zip.exe /S /D=%s"%path)
        print("7zip downloaded")
        gitdownload()
    except:
        print("Could not download 7-zip. Check your internet connection and admin permissions.")
        response = input("Press ENTER to exit...")
        sys.exit(1)