MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / _expect_raises

Function _expect_raises

lib/sqlalchemy/testing/assertions.py:459–498  ·  view source on GitHub ↗
(except_cls, msg=None, check_context=False)

Source from the content-addressed store, hash-verified

457
458@contextlib.contextmanager
459def _expect_raises(except_cls, msg=None, check_context=False):
460 if (
461 isinstance(except_cls, type)
462 and issubclass(except_cls, Warning)
463 or isinstance(except_cls, Warning)
464 ):
465 raise TypeError(
466 "Use expect_warnings for warnings, not "
467 "expect_raises / assert_raises"
468 )
469 ec = _ErrorContainer()
470 if check_context:
471 are_we_already_in_a_traceback = sys.exc_info()[0]
472 try:
473 yield ec
474 success = False
475 except except_cls as err:
476 ec.error = err
477 success = True
478 if msg is not None:
479 # I'm often pdbing here, and "err" above isn't
480 # in scope, so assign the string explicitly
481 error_as_string = str(err)
482 assert re.search(msg, error_as_string, re.UNICODE), "%r !~ %s" % (
483 msg,
484 error_as_string,
485 )
486 if check_context and not are_we_already_in_a_traceback:
487 _assert_proper_exception_context(err)
488 print(str(err).encode("utf-8"))
489
490 # it's generally a good idea to not carry traceback objects outside
491 # of the except: block, but in this case especially we seem to have
492 # hit some bug in either python 3.10.0b2 or greenlet or both which
493 # this seems to fix:
494 # https://github.com/python-greenlet/greenlet/issues/242
495 del ec
496
497 # assert outside the block so it works for AssertionError too !
498 assert success, "Callable did not raise an exception"
499
500
501def expect_raises(except_cls, check_context=True):

Callers 3

_assert_raisesFunction · 0.85
expect_raisesFunction · 0.85
expect_raises_messageFunction · 0.85

Calls 2

_ErrorContainerClass · 0.85

Tested by

no test coverage detected