Index: Lib/decimal.py =================================================================== --- Lib/decimal.py (revision 82423) +++ Lib/decimal.py (working copy) @@ -3810,21 +3810,31 @@ Emin=None, Emax=None, capitals=None, clamp=None, _ignored_flags=None): + # Set defaults; for everything except flags and _ignored_flags, + # inherit from DefaultContext. + try: dc = DefaultContext + except: pass + self.prec = dc.prec if prec is None else prec + self.rounding = dc.rounding if rounding is None else rounding + self.Emin = dc.Emin if Emin is None else Emin + self.Emax = dc.Emax if Emax is None else Emax + self.capitals = dc.capitals if capitals is None else capitals + self.clamp = dc.clamp if clamp is None else clamp + self._ignored_flags = [] if _ignored_flags is None else _ignored_flags + + if traps is None: + traps = dict(dc.traps) + elif not isinstance(traps, dict): + traps = {s: int(s in traps) for s in _signals} + if flags is None: - flags = [] - if _ignored_flags is None: - _ignored_flags = [] - if not isinstance(flags, dict): - flags = dict([(s, int(s in flags)) for s in _signals]) - if traps is not None and not isinstance(traps, dict): - traps = dict([(s, int(s in traps)) for s in _signals]) - for name, val in locals().items(): - if val is None: - setattr(self, name, _copy.copy(getattr(DefaultContext, name))) - else: - setattr(self, name, val) - del self.self + flags = {s: 0 for s in _signals} + elif not isinstance(flags, dict): + flags = {s: int(s in flags) for s in _signals} + self.traps = traps + self.flags = flags + def __repr__(self): """Show the current context.""" s = []