Issue #15784: Modify OSError.__str__() to better distinguish between

errno error numbers and Windows error numbers.
This commit is contained in:
Richard Oudkerk 2012-08-28 19:33:26 +01:00
parent ca2b64682e
commit 30147710e8
3 changed files with 7 additions and 4 deletions

View File

@ -216,14 +216,14 @@ class ExceptionTests(unittest.TestCase):
self.assertEqual(w.winerror, 3) self.assertEqual(w.winerror, 3)
self.assertEqual(w.strerror, 'foo') self.assertEqual(w.strerror, 'foo')
self.assertEqual(w.filename, 'bar') self.assertEqual(w.filename, 'bar')
self.assertEqual(str(w), "[Error 3] foo: 'bar'") self.assertEqual(str(w), "[WinError 3] foo: 'bar'")
# Unknown win error becomes EINVAL (22) # Unknown win error becomes EINVAL (22)
w = OSError(0, 'foo', None, 1001) w = OSError(0, 'foo', None, 1001)
self.assertEqual(w.errno, 22) self.assertEqual(w.errno, 22)
self.assertEqual(w.winerror, 1001) self.assertEqual(w.winerror, 1001)
self.assertEqual(w.strerror, 'foo') self.assertEqual(w.strerror, 'foo')
self.assertEqual(w.filename, None) self.assertEqual(w.filename, None)
self.assertEqual(str(w), "[Error 1001] foo") self.assertEqual(str(w), "[WinError 1001] foo")
# Non-numeric "errno" # Non-numeric "errno"
w = OSError('bar', 'foo') w = OSError('bar', 'foo')
self.assertEqual(w.errno, 'bar') self.assertEqual(w.errno, 'bar')

View File

@ -10,6 +10,9 @@ What's New in Python 3.3.0 Release Candidate 2?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #15784: Modify OSError.__str__() to better distinguish between
errno error numbers and Windows error numbers.
Library Library
------- -------

View File

@ -1016,12 +1016,12 @@ OSError_str(PyOSErrorObject *self)
#ifdef MS_WINDOWS #ifdef MS_WINDOWS
/* If available, winerror has the priority over myerrno */ /* If available, winerror has the priority over myerrno */
if (self->winerror && self->filename) if (self->winerror && self->filename)
return PyUnicode_FromFormat("[Error %S] %S: %R", return PyUnicode_FromFormat("[WinError %S] %S: %R",
self->winerror ? self->winerror: Py_None, self->winerror ? self->winerror: Py_None,
self->strerror ? self->strerror: Py_None, self->strerror ? self->strerror: Py_None,
self->filename); self->filename);
if (self->winerror && self->strerror) if (self->winerror && self->strerror)
return PyUnicode_FromFormat("[Error %S] %S", return PyUnicode_FromFormat("[WinError %S] %S",
self->winerror ? self->winerror: Py_None, self->winerror ? self->winerror: Py_None,
self->strerror ? self->strerror: Py_None); self->strerror ? self->strerror: Py_None);
#endif #endif