在Python中从类中停止程序

在Python中从类中停止程序,python,Python,假设我有一门课: class A: def command(self, input): if command == 'test1': do something... if command == 'quit': #stop the program 在类外,我启动一个while循环: if __name__ == "__main__" lst = A() while True: com

假设我有一门课:

class A:
   def command(self, input):
       if command == 'test1':
            do something...
       if command == 'quit':
            #stop the program
在类外,我启动一个while循环:

if __name__ == "__main__"
    lst = A()
    while True:
        command = input("Enter an option:")
        lst.command(command)
如果命令是“退出”,我需要停止整个程序的运行。我现在面临的问题是,既然我在类外启动了一个while循环,我如何“假”循环以停止整个程序

我正在寻找一个break方法,或者创建另一个函数来完全退出程序,但不是
sys()
quit()
方法,我猜我不允许这样做。

在类中的任何地方使用
sys.exit()
或类似的“核心”函数通常是个坏主意。(如果是
while True
循环也是如此。)相反,让循环自然而优雅地中断

首先,您的
命令
在收到
的“退出”
命令时必须返回一个哨兵。sentinel的值取决于应用程序;假设它是

if command == 'quit': 
    return None
循环应监视返回的值,并在sentinel返回时中断:

lst = A()
command = input("Enter an option:")
while command is not None:        
    lst.command(command)
    command = input("Enter an option:")
在类中的任何位置使用
sys.exit()
或类似的“核心”函数通常是个坏主意。(如果是
while True
循环也是如此。)相反,让循环自然而优雅地中断

首先,您的
命令
在收到
的“退出”
命令时必须返回一个哨兵。sentinel的值取决于应用程序;假设它是

if command == 'quit': 
    return None
循环应监视返回的值,并在sentinel返回时中断:

lst = A()
command = input("Enter an option:")
while command is not None:        
    lst.command(command)
    command = input("Enter an option:")

您可以将quit命令移到
命令
函数之外

class A:
    def command(self, inp):
        pass

if __name__ == "__main__":

    lst = A()
    while True:
        cmd = input("Enter an option: ")
        if cmd.lower() == 'quit':
            break
        else:
            lst.command(cmd)

print('thanks bye!!')
通常最好将退出操作与其他应用程序命令分离。你的
A
类不需要知道应用程序退出机制(因此可以在具有不同退出机制的其他应用程序中重用)


我也这样做,它将不区分大小写。因此,
退出
退出
退出
都将触发该操作。

您可以将退出命令移到
命令
功能之外

class A:
    def command(self, inp):
        pass

if __name__ == "__main__":

    lst = A()
    while True:
        cmd = input("Enter an option: ")
        if cmd.lower() == 'quit':
            break
        else:
            lst.command(cmd)

print('thanks bye!!')
通常最好将退出操作与其他应用程序命令分离。你的
A
类不需要知道应用程序退出机制(因此可以在具有不同退出机制的其他应用程序中重用)

我也这样做,它将不区分大小写。因此,
退出
退出
退出
都将触发该操作