48 lines
1.1 KiB
Python
48 lines
1.1 KiB
Python
|
import sys
|
||
|
|
||
|
try:
|
||
|
from collections.abc import Iterable
|
||
|
except ImportError:
|
||
|
from collections import Iterable # noqa
|
||
|
|
||
|
PY3 = sys.version_info[0] == 3
|
||
|
PY38 = PY3 and sys.version_info[1] >= 8
|
||
|
|
||
|
XRANGE = range if PY3 else xrange # noqa
|
||
|
INT = (int,) if PY3 else (int, long) # noqa
|
||
|
|
||
|
if PY3:
|
||
|
import builtins
|
||
|
exec_ = getattr(builtins, "exec")
|
||
|
|
||
|
def reraise(tp, value, tb=None):
|
||
|
try:
|
||
|
if value is None:
|
||
|
value = tp()
|
||
|
if value.__traceback__ is not tb:
|
||
|
raise value.with_traceback(tb)
|
||
|
raise value
|
||
|
finally:
|
||
|
value = None
|
||
|
tb = None
|
||
|
|
||
|
else:
|
||
|
def exec_(_code_, _globs_=None, _locs_=None):
|
||
|
"""Execute code in a namespace."""
|
||
|
if _globs_ is None:
|
||
|
frame = sys._getframe(1)
|
||
|
_globs_ = frame.f_globals
|
||
|
if _locs_ is None:
|
||
|
_locs_ = frame.f_locals
|
||
|
del frame
|
||
|
elif _locs_ is None:
|
||
|
_locs_ = _globs_
|
||
|
exec("""exec _code_ in _globs_, _locs_""")
|
||
|
|
||
|
exec_("""def reraise(tp, value, tb=None):
|
||
|
try:
|
||
|
raise tp, value, tb
|
||
|
finally:
|
||
|
tb = None
|
||
|
""")
|