10

すべてのドキュメントが教えてくれるのは、

ユーザーが割り込みキー (通常はControl-CまたはDelete) を押したときに発生します。実行中、定期的に割り込みのチェックが行われます。

しかし、コードの観点からすると、いつこの例外を確認できますか? ステートメントの実行中に発生しますか? ステートメント間のみ?式の途中で発生することはありますか?

例えば:

file_ = open('foo')
# <-- can a KeyboardInterrupt be raised here, after the successful
# completion of open but prior to the try? -->
try:
    # try some things with file_
finally:
    # cleanup

このコードはタイミングの良いときにリークしKeyboardInterruptますか? それとも、いくつかのステートメントまたは式の実行中に発生しますか?

4

2 に答える 2

6

無関係なPEP 343のメモによると:

バグのないコードを書いたとしても、KeyboardInterrupt 例外により、任意の 2 つの仮想マシン オペコード間でコードが終了する可能性があります。

したがって、本質的にどこでも発生する可能性があります。実際、単一の式の評価中に発生する可能性があります。(式には関数呼び出しを含めることができ、関数呼び出し内ではほとんどすべてのことが発生する可能性があるため、これは驚くべきことではありません。)

于 2016-02-23T07:43:59.197 に答える