この質問にはすでに答えがあります。
私は試してみた...私のコードでブロックを除くと例外がスローされたときその場合でも、コードを続行したいのですが、それでもすべてを正常に実行できます。問題は、except:blockを空のままにするか#doを何も指定しないと構文エラーになることです。ループに入っていないのでcontinueを使用することはできません。私が使うことのできるキーワードはありますか?
except:
pass
Pythonの標準の "nop"はpass
ステートメント:
try:
do_something()
except Exception:
pass
を使うexcept Exception
裸の代わりにexcept
のような例外をキャッチしないでくださいSystemExit
、KeyboardInterrupt
等
Python 2では最後にスローされた例外が記憶されているため、例外をスローするステートメントに含まれるオブジェクトのいくつかは無期限に(実際には、次の例外まで)存続しています。これがあなたにとって重要で、(通常)最後にスローされた例外を覚えておく必要がない場合は、代わりに次のようにします。pass
:
try:
do_something()
except Exception:
sys.exc_clear()
これにより、最後にスローされた例外がクリアされます。
Python 3では、例外インスタンスを保持する変数は次のようになります。削除しました終了時にexcept
ブロック。変数が以前に値を保持していたとしても、except
ブロックになる未定義再び。
exc_clear
Python 3で削除されました。docs.python.org/3/whatsnew/3.0.html#index-22。 Python 3でこれに対処するいくつかの方法はこちらを参照してください。cosmicpercolator.com/2016/01/13/… - bcattle
Python 3.4では、これを行うための新しい方法があります。
from contextlib import suppress
with suppress(Exception):
# your code
これを追加したコミットがあります。http://hg.python.org/cpython/rev/406b47c64480
そして、これと作者Raymond Hettingerが、これと他のあらゆる種類のPythonの熱さについて話しています(43:30の関連ビット)。http://www.youtube.com/watch?v=OSGv2VnC0go
あなたが裸をエミュレートしたい場合except
キーワードと同様のものを無視KeyboardInterrupt
- 通常はそうではありません - 使用することができますwith suppress(BaseException)
。
編集:のように見えますignored
に改名されましたsuppress
3.4リリースより前
try...catch: pass
そのため、ブロック内で例外が発生した場合は、ブロックの終了後に実行が継続されます。 - Jack O'Connorwith suppress(TypeError): return data[0]
(長い例:pastebin.com/gcvAGqEP) - Airwith suppress(Exception)
2017-09では、try / exceptのほうがパフォーマンスが良いためです。このコミットを確認する「修正#27818 - try / except / passをcontextlib.suに置き換えました…」 - stackoverYC
これを試して:
try:
blah()
except:
pass
while True:
try:
f = open(' filedoesnotexist.txt') `except:
pass
KeyboardInterruptはコードを停止して終了します。 - Chthonic Projectexcept
KeyboardInterruptを含む、あらゆる例外をキャッチしますが、それが内部で発生した場合のみです。try
。この例では、KeyboardInterruptは、try
またはの中except
捕まえられなかった場合、次のような例を実行するとwhile True:
try: pass
except: pass
KeyboardInterruptが約50%の確率で検出されていることがわかります。もし、あんたがtime.sleep(1)
の中try
あなたはそれがほぼ毎回捕まることに気付くでしょう。 - Jack O'Connor