私はこれを持っています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.call(['wrongcommand'])
except OSError:
print ('wrongcommand does not exist')
考えてみてください。とにかくos.system
ではなくsubprocess
を使用する必要があります...
Os.system()はメソッドの終了コードを通じて失敗を示しているため
呼び出されたコマンドの終了コードは、直接Pythonに戻されます。
障害が発生した場合にos.system()が例外を発生させることを伝えるドキュメントがあります。 os.system()は、OSの下にあるsystem()呼び出しを呼び出し、その戻り値を返すだけです。
Os.system()のドキュメント注意深くを読んでください。
コードスニペットに2つの問題があります。まず第一に、_try: ... except:
_を実行するだけではなく、処理する例外について常に特定してください。それ以外の場合、プログラムは、あらゆる種類のエラーだけでなく、予期しないエラーも吸収します。ほとんどの場合、これにより、実行時の他の時点で予期しない動作が発生します。
さらに、os.system()
呼び出しは、ほとんどの場合、subprocess
モジュールの対応するものに置き換える必要があります。
何が問題なのかを確認するには、try/exceptブロックを省略して、実際にtraceback/exceptionを確認します。他の人が指摘したように、あなたのケースには例外がないことに気づくでしょう。そのため、カスタム文字列は出力されません。
結論:コードブロックで発生する可能性のある特定の例外について考えます。特定の理由で発生することが予想されるそれらについてしっかりと考え、それらを適切に処理します。予期しないものは扱わないでください。
wrongcommand: command not found
はシェルの出力os.system
はコマンドを呼び出すために使用しています。 os.system
は例外をスローしませんでした
編集:mgilsonのコメントの一部をコピーして貼り付けて編集
最も簡単な方法がもう1つあります。
import os
def dat():
if os.system('date') == 0:
print("Command successfully executed")
else:
print("Command failed to execute")
dat()
サブプロセスはあなたの親友かもしれませんが。 os.systemはまだどこかで、特にプログラマーがC/C++モードでプレイするのに役立ちます。
したがって、コードは以下になります。
import os
try:
os_cmd = 'wrongcommand'
if os.system(os_cmd) != 0:
raise Exception('wrongcommand does not exist')
except:
print("command does not work")