2012-10-19 49 views
2

如果我的嘗試成功,我想退出Python腳本。我的代碼不會退出並繼續執行腳本的其餘部分。sys.exit()不終止我的程序

如果我運行python myscript.py --help,我需要腳本退出。如果我運行python myscript.py我需要執行except部分。

try: 
    if sys.argv[1] == '--help' or sys.argv[1] == '-help' or \ 
      sys.argv[1] == '-h' or sys.argv[1] == '--h': 
     print "NAME" 
     sys.exit("Usage : python go.py") 
except: 
    #REST OF THE CODE. 
+0

我該怎麼辦呢?而FYI,你沒有義務迴應。 – hlx

+0

嘗試一下:除外:刪除 – Scooter

+0

呃......你還會怎麼做?你只會讓執行完成。 – aychedee

回答

5

爲什麼要使用try/except塊?像貝瑞爾說的,你正在捕捉所有的例外和隱藏問題。嘗試/除了塊是例外的情況。不是替代代碼路徑。

def main(): 
    # main code block 

if sys.argv[1] == '--help' or sys.argv[1] == '-help' or \ 
    sys.argv[1] == '-h' or sys.argv[1] == '--h': 
    print "Help text" 
else: 
    main() 

此外,作爲使用try/except的一般規則。趕上你關心的例外。調試甚至無法告訴你什麼是錯的東西是不可能的。

+0

確定工作正常。謝謝。 – hlx

10

隨着docs saysys.exit其實不只是提高SystemExit和你到底攔截它。你可以在try-except之外調用sys.exit或者明確地捕獲它,然後重新提升。

1

作爲一般評論,也許你應該看看使用argparse。 http://docs.python.org/library/argparse.html#module-argparse使用argparse你不必手動檢查argv數組; argparse會爲你做所有的工作。

+1

或docopt! http://docopt.org/這是要說明哪些請求是urllib。 – aychedee

+0

已經寫了更多的Python腳本,甚至比docopt更好,在我看來是https://pypi.python.org/pypi/argh –