Skip to content

Commit 22b0491

Browse files
Address picnixz review: restore divmod line, use set literal, add deferred-attrs test
1 parent 4a5a3f1 commit 22b0491

2 files changed

Lines changed: 26 additions & 3 deletions

File tree

‎Lib/_pydecimal.py‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1501,8 +1501,7 @@ def __divmod__(self, other, context=None):
15011501
return ans, ans
15021502
else:
15031503
with context._defer_traps():
1504-
return (context._raise_error(DivisionByZero, 'x // 0',
1505-
sign),
1504+
return (context._raise_error(DivisionByZero, 'x // 0', sign),
15061505
context._raise_error(InvalidOperation, 'x % 0'))
15071506

15081507
quotient, remainder = self._divide(other, context)
@@ -4064,7 +4063,7 @@ def __setattr__(self, name, value):
40644063
return object.__setattr__(self, name, value)
40654064
elif name == 'flags' or name == 'traps':
40664065
return self._set_signal_dict(name, value)
4067-
elif name in ('_ignored_flags', '_deferred_traps', '_deferred_error'):
4066+
elif name in {'_ignored_flags', '_deferred_traps', '_deferred_error'}:
40684067
return object.__setattr__(self, name, value)
40694068
else:
40704069
raise AttributeError(

‎Lib/test/test_decimal.py‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4287,6 +4287,30 @@ def test_signaldict_repr(self):
42874287
class PyContextFlags(ContextFlags, unittest.TestCase):
42884288
decimal = P
42894289

4290+
def test_deferred_traps_attributes(self):
4291+
# The _defer_traps state lives in the _deferred_traps and
4292+
# _deferred_error attributes, which __setattr__ must accept.
4293+
Context = self.decimal.Context
4294+
Decimal = self.decimal.Decimal
4295+
Overflow = self.decimal.Overflow
4296+
context = Context(prec=9, Emin=-999, Emax=999, traps=[])
4297+
self.assertEqual(context._deferred_traps, 0)
4298+
self.assertIsNone(context._deferred_error)
4299+
context._deferred_traps = 1
4300+
context._deferred_traps = 0
4301+
context._deferred_error = Overflow('test')
4302+
context._deferred_error = None
4303+
with self.assertRaises(AttributeError):
4304+
context._no_such_attribute = 1
4305+
4306+
# A trapped operation resets the state, so the context
4307+
# remains usable afterwards.
4308+
context.traps[Overflow] = 1
4309+
with self.assertRaises(Overflow):
4310+
context.multiply(Decimal('1E+800'), Decimal('1E+800'))
4311+
self.assertEqual(context._deferred_traps, 0)
4312+
self.assertIsNone(context._deferred_error)
4313+
42904314
class SpecialContexts:
42914315
"""Test the context templates."""
42924316

0 commit comments

Comments
 (0)