mirror of
https://github.com/python/cpython.git
synced 2025-10-05 06:31:48 +00:00
Merged revisions 74845 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r74845 | georg.brandl | 2009-09-16 22:30:09 +0200 (Mi, 16 Sep 2009) | 5 lines #6844: do not emit DeprecationWarnings on access if Exception.message has been set by the user. This works by always setting it in __dict__, except when it's implicitly set in __init__. ........
This commit is contained in:
parent
6bb97a2ec4
commit
8997103be0
3 changed files with 81 additions and 18 deletions
|
@ -303,6 +303,45 @@ class ExceptionTests(unittest.TestCase):
|
|||
'pickled "%r", attribute "%s"' %
|
||||
(e, checkArgName))
|
||||
|
||||
|
||||
def testDeprecatedMessageAttribute(self):
|
||||
# Accessing BaseException.message and relying on its value set by
|
||||
# BaseException.__init__ triggers a deprecation warning.
|
||||
exc = BaseException("foo")
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
self.assertEquals(exc.message, "foo")
|
||||
self.assertEquals(len(w), 1)
|
||||
self.assertEquals(w[0].category, DeprecationWarning)
|
||||
self.assertEquals(
|
||||
str(w[0].message),
|
||||
"BaseException.message has been deprecated as of Python 2.6")
|
||||
|
||||
|
||||
def testRegularMessageAttribute(self):
|
||||
# Accessing BaseException.message after explicitly setting a value
|
||||
# for it does not trigger a deprecation warning.
|
||||
exc = BaseException("foo")
|
||||
exc.message = "bar"
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
self.assertEquals(exc.message, "bar")
|
||||
self.assertEquals(len(w), 0)
|
||||
# Deleting the message is supported, too.
|
||||
del exc.message
|
||||
self.assertRaises(AttributeError, getattr, exc, "message")
|
||||
|
||||
def testPickleMessageAttribute(self):
|
||||
# Pickling with message attribute must work, as well.
|
||||
e = Exception("foo")
|
||||
f = Exception("foo")
|
||||
f.message = "bar"
|
||||
for p in pickle, cPickle:
|
||||
ep = p.loads(p.dumps(e))
|
||||
with warnings.catch_warnings():
|
||||
ignore_message_warning()
|
||||
self.assertEqual(ep.message, "foo")
|
||||
fp = p.loads(p.dumps(f))
|
||||
self.assertEqual(fp.message, "bar")
|
||||
|
||||
def testSlicing(self):
|
||||
# Test that you can slice an exception directly instead of requiring
|
||||
# going through the 'args' attribute.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue