2012-04-15 9 views
18

I持っていたコードを除いて、これのtry /:私は、印刷後にtry/exceptではどのようにプログラムを終了できますか?

document = raw_input ('Your document name is ') 

try: 
    with open(document, 'r') as a: 
     for element in a: 
      print element 

except: 
    print document, 'does not exist' 

どのように私はプログラムを終了します "[ファイル名]は存在しませんか"? breakpassは明らかに機能しません。私はエラーが発生したくないので、sys.exitはオプションではありません。

try部分は無視してください。これは単なるダミーです。

sys.exit(1) 

を使用して

答えて

6

は、それがプログラムを終了するには完全に正常な方法だ、クラッシュエラーではありません。終了コード1は、何か問題があったことを意味する規則です(正常に実行された場合は0が返されます)。

+0

「quit()」の使用に何か問題がありますか?誰もそれを言わない。 –

+2

'quit()'は対話的なPythonシェルでのみ動作することを意図しています。私はプログラムでそれを使用しません。 http://docs.python.org/library/functions.htmlには掲載されていません。他のPython実装へ移植することは期待できません。 –

23

使用sys.exitは:

import sys 

try: 
    # do something 
except Exception, e: 
    print >> sys.stderr, "does not exist" 
    print >> sys.stderr, "Exception: %s" % str(e) 
    sys.exit(1) 

をお勧めしますので、後でデバッグすることができます発生した例外を印刷することです。

tracebackモジュールを使用してスタックトレースを印刷することもできます。

sys.exitで返すintは、プログラムの戻りコードになります。あなたのプログラムが(あなたに起こるし、自動化することができるかについての情報を提供します)返されたどのような終了コードを参照するには、あなたが行うことができます:

echo $? 
7

また、関数の中で、あなたのコードを入れて、リターンを発行することができます。スクリプトから呼び出すことができるmainを呼び出すことができます。

def main(): 
    document = raw_input ('Your document name is ') 

    try: 
     with open(document, 'r') as a: 
      for element in a: 
       print element 

    except: 
     print document, 'does not exist' 
     return 

if __name__ == "__main__": 
    main() 
+0

例外の場合の "return"の問題は、コマンドラインでエラーコードが表示されないことです。監視システムを使用している場合、通常はログの確認とプログラムの戻りコードがあります。したがって、たとえエラーがあってもすべて0が返された場合は、維持管理が難しい可能性があります。 –

+0

@linker戻る前にエラーメッセージを印刷することはできます。すべてのプログラムが他のプログラム用の出力を生成する必要はありません - 時には人間が読めるだけで十分です。 – agf

+2

@agf私は実際のコンテキストで最も有用であると分かったことを説明していますが、人間が読める形式と一貫したリターンコードの両方を持つことが最善です。 –

5

ちょうどそれを起こしてください。それはexceptでリレイズエラーに関する調達の例外セクションでは、開発者

document = raw_input ('Your document name is ') 

try: 
    with open(document, 'r') as a: 
     for element in a: 
      print element 

except: 
    print document, 'does not exist' 
    raise 

チェックpython documentのために、より親しみやすいです。

関連する問題