2017-09-18 31 views
0

比方說,我有一個類:從類中停止程序在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: 
     command = input("Enter an option:") 
     lst.command(command) 

我被困在點如果命令是「退出」,我需要停止整個程序的運行。我現在面臨的問題是,由於我在課堂外發起了一個while循環,我該如何'假'循環才能停止整個程序?

我正在尋找一個休息方法或可能創建另一個函數來完全退出程序,但不是sys()quit()方法,我猜我不允許這樣做。

+1

['sys.exit()'](https://docs.python.org/3/library/sys.html#sys.exit) – Nayuki

回答

1

在班級的任何地方使用sys.exit()或類似的「核」功能通常是一個壞主意。 (所以有一個while True循環。)相反,讓循環自然和優雅地打破。

首先,您的command必須在收到"quit"時返回一個標記。哨兵的價值取決於應用程序;讓我們說這是None

if command == 'quit': 
    return None 

循環應該看的返回值,並打破返回定點時:

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

你可以只移動command功能外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!!') 

將quit操作與其他應用程序命令分離通常是很好的做法。你的A類不需要知道應用程序的退出機制(因此可以在具有不同退出機制的其他應用程序中重用)。

我也使它不會區分大小寫。所以quit,QuitQUIT都會觸發該動作。