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 """)