Author: Amaury Forgeot d'Arc <[email protected]>
Branch: py3.5
Changeset: r90895:259a16de4c00
Date: 2017-04-01 14:35 +0200
http://bitbucket.org/pypy/pypy/changeset/259a16de4c00/
Log: CPython makes a difference between OSError(None,None) and OSError(),
do the same in PyPy
diff --git a/pypy/module/exceptions/interp_exceptions.py
b/pypy/module/exceptions/interp_exceptions.py
--- a/pypy/module/exceptions/interp_exceptions.py
+++ b/pypy/module/exceptions/interp_exceptions.py
@@ -443,10 +443,10 @@
"""OS system call failed."""
def __init__(self, space):
- self.w_errno = space.w_None
- self.w_strerror = space.w_None
- self.w_filename = space.w_None
- self.w_filename2 = space.w_None
+ self.w_errno = None
+ self.w_strerror = None
+ self.w_filename = None
+ self.w_filename2 = None
self.written = -1 # only for BlockingIOError.
W_BaseException.__init__(self, space)
@@ -556,9 +556,9 @@
# since we rebind args_w, we need special reduce, grump
def descr_reduce(self, space):
extra = []
- if not space.is_w(self.w_filename, space.w_None):
+ if self.w_filename:
extra.append(self.w_filename)
- if not space.is_w(self.w_filename2, space.w_None):
+ if self.w_filename2:
extra.append(space.w_None)
extra.append(self.w_filename2)
lst = [self.getclass(space), space.newtuple(self.args_w + extra)]
@@ -567,25 +567,26 @@
return space.newtuple(lst)
def descr_str(self, space):
- if (not space.is_w(self.w_errno, space.w_None) and
- not space.is_w(self.w_strerror, space.w_None)):
+ if self.w_errno:
errno = space.unicode_w(space.str(self.w_errno))
+ else:
+ errno = u""
+ if self.w_strerror:
strerror = space.unicode_w(space.str(self.w_strerror))
- if not space.is_w(self.w_filename, space.w_None):
- if not space.is_w(self.w_filename2, space.w_None):
- return space.newunicode(u"[Errno %s] %s: %s -> %s" % (
- errno,
- strerror,
- space.unicode_w(space.repr(self.w_filename)),
- space.unicode_w(space.repr(self.w_filename2))))
- return space.newunicode(u"[Errno %s] %s: %s" % (
- errno,
- strerror,
- space.unicode_w(space.repr(self.w_filename))))
+ else:
+ strerror = u""
+ if self.w_filename:
+ if self.w_filename2:
+ return space.newunicode(u"[Errno %s] %s: %s -> %s" % (
+ errno, strerror,
+ space.unicode_w(space.repr(self.w_filename)),
+ space.unicode_w(space.repr(self.w_filename2))))
+ return space.newunicode(u"[Errno %s] %s: %s" % (
+ errno, strerror,
+ space.unicode_w(space.repr(self.w_filename))))
+ if self.w_errno and self.w_strerror:
return space.newunicode(u"[Errno %s] %s" % (
- errno,
- strerror,
- ))
+ errno, strerror))
return W_BaseException.descr_str(self, space)
def descr_get_written(self, space):
@@ -637,7 +638,7 @@
not space.is_w(self.w_strerror, space.w_None)):
winerror = space.int_w(self.w_winerror)
strerror = space.unicode_w(self.w_strerror)
- if not space.is_w(self.w_filename, space.w_None):
+ if self.w_filename:
return space.newunicode(u"[Error %d] %s: %s" % (
winerror,
strerror,
diff --git a/pypy/module/exceptions/test/test_exc.py
b/pypy/module/exceptions/test/test_exc.py
--- a/pypy/module/exceptions/test/test_exc.py
+++ b/pypy/module/exceptions/test/test_exc.py
@@ -2,8 +2,6 @@
class AppTestExc(object):
- spaceconfig = dict(usemodules=('exceptions',))
-
def setup_class(cls):
cls.w_file = cls.space.wrap(__file__)
@@ -392,6 +390,12 @@
assert e.filename2 == "bok"
assert str(e) == "[Errno 42] bar: 'baz' -> 'bok'"
+ def test_oserror_None(self):
+ assert str(OSError()) == ""
+ assert str(OSError(None)) == "None"
+ assert str(OSError(None, None)) == "[Errno None] None"
+ assert str(OSError(None, None, None, None)) == "[Errno None] None"
+
# Check the heuristic for print & exec covers significant cases
# As well as placing some limits on false positives
def test_former_statements_refer_to_builtins(self):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit