mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Issue #9136: Profiling Decimal gave 'dictionary changed size during iteration'.
Remove the use of locals() that caused this error.
This commit is contained in:
		
							parent
							
								
									e42f1bb354
								
							
						
					
					
						commit
						0dd8f7890a
					
				
					 2 changed files with 35 additions and 13 deletions
				
			
		|  | @ -3813,20 +3813,38 @@ def __init__(self, prec=None, rounding=None, | |||
|                  Emin=None, Emax=None, | ||||
|                  capitals=None, clamp=None, | ||||
|                  _ignored_flags=None): | ||||
|         if flags is None: | ||||
|             flags = [] | ||||
|         # Set defaults; for everything except flags and _ignored_flags, | ||||
|         # inherit from DefaultContext. | ||||
|         try: | ||||
|             dc = DefaultContext | ||||
|         except NameError: | ||||
|             pass | ||||
| 
 | ||||
|         self.prec = prec if prec is not None else dc.prec | ||||
|         self.rounding = rounding if rounding is not None else dc.rounding | ||||
|         self.Emin = Emin if Emin is not None else dc.Emin | ||||
|         self.Emax = Emax if Emax is not None else dc.Emax | ||||
|         self.capitals = capitals if capitals is not None else dc.capitals | ||||
|         self.clamp = clamp if clamp is not None else dc.clamp | ||||
| 
 | ||||
|         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 | ||||
|             self._ignored_flags = [] | ||||
|         else: | ||||
|             self._ignored_flags = _ignored_flags | ||||
| 
 | ||||
|         if traps is None: | ||||
|             self.traps = dc.traps.copy() | ||||
|         elif not isinstance(traps, dict): | ||||
|             self.traps = dict((s, int(s in traps)) for s in _signals) | ||||
|         else: | ||||
|             self.traps = traps | ||||
| 
 | ||||
|         if flags is None: | ||||
|             self.flags = dict.fromkeys(_signals, 0) | ||||
|         elif not isinstance(flags, dict): | ||||
|             self.flags = dict((s, int(s in flags)) for s in _signals) | ||||
|         else: | ||||
|             self.flags = flags | ||||
| 
 | ||||
|     def __repr__(self): | ||||
|         """Show the current context.""" | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Mark Dickinson
						Mark Dickinson