当我输入“否”时,它将无法正确执行

时间:2018-12-19 01:30:23

标签: python python-3.x

import webbrowser
import time
import sys
import urllib.request


def con():
    cont = input("Do you want to continue? ")
    if (cont.lower() == "yes" or cont.lower() == "y"):
        main()
    elif (cont.lower() == "no" or cont.lower() == "n"):
        sys.exit()
    else:
        print("Invalid answer. Please try again")
        time.sleep(1)
        con()


def main():
    try:
        website = input("What website do you want to go to? (ex. Example.com) ")
        fWebsite = "http://{}".format(website)
        time.sleep(1)
        if (urllib.request.urlopen(fWebsite).getcode() == 200):
            webbrowser.open(fWebsite)
        time.sleep(1)

    except:
        print("Invalid website. Please enter another one")
        time.sleep(1)
        main()
    con()


main()

当代码运行con()时,每当我尝试输入no时,总是显示无效的网站。请输入另一个。如何修复退出程序?其他所有工作都只是这一部分。

1 个答案:

答案 0 :(得分:1)

sys.exit函数通过引发SystemExit异常来工作。您的代码有一个裸露的except块,该块正在捕获该异常并抑制了其正常用途(即,安静地退出)。

此问题的最佳解决方案是使您的except子句更加针对您希望捕获的异常类型。捕获所有内容几乎总是一个错误的主意(唯一的例外是,当您捕获所有异常,但记录并重新引发其中的大多数异常时)。

由于您的特定代码试图处理来自urllib的异常,因此捕获urllib.error.URLError可能是您的最佳选择。