Derive outcomes.exit.Exception from SystemExit instead of KeyboardInterrupt

This is required for properly getting out of pdb, where
KeyboardInterrupt is caught in py36 at least.

Ref: https://github.com/pytest-dev/pytest/issues/1865#issuecomment-242599949
This commit is contained in:
Daniel Hahler
2018-11-02 19:50:29 +01:00
parent 038f1f94c2
commit fc4aa27cae
5 changed files with 11 additions and 8 deletions

View File

@@ -15,6 +15,7 @@ from .reports import CollectErrorRepr
from .reports import CollectReport
from .reports import TestReport
from _pytest._code.code import ExceptionInfo
from _pytest.outcomes import Exit
from _pytest.outcomes import skip
from _pytest.outcomes import Skipped
from _pytest.outcomes import TEST_OUTCOME
@@ -190,10 +191,11 @@ def check_interactive_exception(call, report):
def call_runtest_hook(item, when, **kwds):
hookname = "pytest_runtest_" + when
ihook = getattr(item.ihook, hookname)
reraise = (Exit,)
if not item.config.getvalue("usepdb"):
reraise += (KeyboardInterrupt,)
return CallInfo.from_call(
lambda: ihook(item=item, **kwds),
when=when,
reraise=KeyboardInterrupt if not item.config.getvalue("usepdb") else (),
lambda: ihook(item=item, **kwds), when=when, reraise=reraise
)