退出函数在try-except块中不起作用

时间:2015-11-11 15:06:36

标签: python function try-except

这是退出函数,我想在try除了块之外运行它。

def quit_function(quit):
     if(quit=="quit"):
        sys.exit(1)

当我输入正确的输入时它起作用function_one但是当我写“exit”以退出程序时quit_function不起作用,除了部分工作因此输出是“无效输入”..我该如何修复它? / p>

 while True:
    try:
        a=raw_input("Enter input :").lower()
        function_one(a)
        quit_function(a)
    except:
        print "invalid input"
    else:
        break

3 个答案:

答案 0 :(得分:6)

class ModalFormCaptureFilePreviewViewController: UIViewController, QLPreviewControllerDataSource, QLPreviewControllerDelegate { var currentFile:Files? let preview = QLPreviewController() override func viewDidLoad() { super.viewDidLoad() preview.dataSource = self showViewController(preview, sender: self) } 提出SystemExit,其继承自exit

您正在捕捉BaseException区块中的退出。尝试使except更具体,仅捕获正常异常(不是退出信号):

except

更好的是,找出你需要捕获的实际特定类型的异常,并且只捕获它。

答案 1 :(得分:0)

SystemExit函数实际上引发了一个特殊的finally异常,该异常会传播堆栈,执行SystemExit个try语句块,直到异常被捕获或到达堆栈顶部。在后一种情况下,python干净地退出,而不是打印回溯。要避免捕获except异常,请将您的except Exception声明更改为os._exit或更具体的内容。或者,如果你真的需要立即退出而没有运行的激活处理程序,你可以使用import datetime as dt dates='''\ 2015/11/11 1941/12/07 1776/07/04''' for ds in dates.splitlines(): date=dt.datetime.strptime(ds, '%Y/%m/%d').date() print(date.strftime("%B %d, %Y"))

答案 2 :(得分:0)

当我写“退出”当我写“退出”时我会假设,因为你的函数会查找字符串"quit"。< / p>

首先,因为你有一个通用的except阻止,你没有看到实际的Exception是什么,所以我打赌function_one("quit")抛出一个Exception。您需要在quit_function()之前处理function_one()

其次,sys.exit()也会抛出一种特殊类型的异常,因此except:不会削减它。

这些方面应该有效:

while True:
    try:
        a=raw_input("Enter input :").lower()
        quit_function(a)
        function_one(a)
    except Exception:
        print "invalid input"
    else:
        break