処理するデータが正確でない場合は、シェルプロンプトに戻り、役立つメッセージを表示してください。スクリプトが問題なくエラーメッセージが表示されなくなるまで、ユーザーはフラグを立てた問題を修正する必要があります。私はTTDでスクリプトを開発しているので、関数を書く前にpytest
テストを書く。有用なメッセージでPythonのコマンドラインスクリプトを終了するPython
most heavily up-voted answer hereは、sys.exit
を呼び出すか、SystemExit
を呼び出すことによってスクリプトを編集することを提案しています。
機能:
パス(_non-text.png
がPNGファイルである、すなわち、UTF-8でエンコードされていない)、このテスト:
def test_istext():
with pytest.raises(SystemExit):
istext('_non-text.png')
がしかし、スクリプトが実行され続け、 try/except
ブロックが実行された後のステートメントが実行されます。
私はスクリプトが完全に終了するようにして、ユーザがデータを正しくデバッグできるようにしてください。スクリプトはそれが何をするかを行います(UTF-8テキストでいっぱいのディレクトリを処理するファイルではなく、PNG、JPG、PPTX ...ファイル)。
も試み:
以下もSystemExit
のサブクラスである例外を発生させることにより、上記テストに合格し、それはまた、スクリプトを終了しない:
def istext(file_to_test):
class NotUTF8Error(SystemExit): pass
try:
open(file_to_test).read(512)
except UnicodeDecodeError:
raise NotUTF8Error('File {} must be UTF-8.'.format(file_to_test))
ええと、私はエラーメッセージがなくても、この例題を動作させることができませんでした。 –
クラス 'NotUTF8Error(SystemExit):pass'を宣言した後、例外としてUnicodeDecodeError例外を除いた後、例外からraise NotUTF8Errorが' SyntaxError'を取得します。 –
気にしないでください - 私はこれを動作させます。今度はPyTestが 'NameError:name 'NotUTF8Error' not defined'で失敗します。 –