diff options
author | Hajime Nakagami <nakagami@gmail.com> | 2013-04-20 17:10:23 +0900 |
---|---|---|
committer | Hajime Nakagami <nakagami@gmail.com> | 2013-04-20 17:10:23 +0900 |
commit | fbcdba12f88d88c509fc34eb8aab3f501d1b705b (patch) | |
tree | f1ca2029cfd147478447d3cb98bae587a8ccb3c2 /lib/sqlalchemy/util/compat.py | |
parent | af9ed1ff16fce148af46fbff33286fc30e33773d (diff) | |
parent | 7f0ee900b6c35a9bff214f9ebb02c3fb98d1f7e1 (diff) | |
download | sqlalchemy-fbcdba12f88d88c509fc34eb8aab3f501d1b705b.tar.gz |
merge from default
Diffstat (limited to 'lib/sqlalchemy/util/compat.py')
-rw-r--r-- | lib/sqlalchemy/util/compat.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/sqlalchemy/util/compat.py b/lib/sqlalchemy/util/compat.py index 2a0f06f8e..033a87cc7 100644 --- a/lib/sqlalchemy/util/compat.py +++ b/lib/sqlalchemy/util/compat.py @@ -140,3 +140,28 @@ else: def b(s): return s + +if py3k: + def reraise(tp, value, tb=None, cause=None): + if cause is not None: + value.__cause__ = cause + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + + def raise_from_cause(exception, exc_info): + exc_type, exc_value, exc_tb = exc_info + reraise(type(exception), exception, tb=exc_tb, cause=exc_value) +else: + exec("def reraise(tp, value, tb=None, cause=None):\n" + " raise tp, value, tb\n") + + def raise_from_cause(exception, exc_info): + # not as nice as that of Py3K, but at least preserves + # the code line where the issue occurred + exc_type, exc_value, exc_tb = exc_info + reraise(type(exception), exception, tb=exc_tb) + + + + |