私はこのpythonコードを持っています:
import os
try:
os.system('wrongcommand')
except:
print("command does not work")
コードは以下を出力します。
wrongcommand: command not found
の代わりにcommand does not work
。エラーメッセージが表示されない理由を知っている人はいますか?
コマンドが存在しないときに例外をスローしたい場合は、次を使用する必要がありますsubprocess
。
import subprocess
try:
subprocess.run(['wrongcommand'], check = True)
except subprocess.CalledProcessError:
print ('wrongcommand does not exist')
考えてみれば、とにかくsubprocess
代わりに使用する必要があります...os.system
os.system() はメソッドの終了コードを通じて失敗を示すため
呼び出されたコマンドの終了コードは、直接 Python に返されます。
失敗した場合に os.system() が例外を発生させることを示すドキュメントがあります。os.system() は、OS の基になる system() 呼び出しを呼び出し、その戻り値を返すだけです。
os.system() のドキュメントをよく読んでください。
コード スニペットには 2 つの問題があります。まず第一に、単に do するのではなくtry: ... except:
、処理したい例外を常に明確にします。そうしないと、プログラムは予期しないエラーも含め、あらゆる種類のエラーを単純に飲み込んでしまいます。ほとんどの場合、これにより、実行時の別の時点で予期しない動作が発生します。
さらに、ほとんどの場合、呼び出しはモジュールos.system()
からの対応するものに置き換える必要があります。subprocess
何が問題なのかを確認するには、try/except ブロックを省略して、実際にトレースバック/例外を確認します。他の人が指摘したように、カスタム文字列が印刷されない理由であるケースには例外がないことに気付くでしょう。
結論: コード ブロックで発生する可能性のある特定の例外について考えてください。特定の理由で発生すると予想されるものをよく考え、それらを適切に処理してください。あなたが期待していないものを扱わないでください。
wrongcommand: command not found
os.system
コマンドを呼び出すために使用して いるシェルの出力です。os.system
例外をスローしませんでした
編集:mgilsonのコメントの一部をコピーして貼り付けて編集