summaryrefslogtreecommitdiff
path: root/numpy/compat
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/compat')
-rw-r--r--numpy/compat/py3k.py10
-rw-r--r--numpy/compat/tests/test_compat.py3
2 files changed, 12 insertions, 1 deletions
diff --git a/numpy/compat/py3k.py b/numpy/compat/py3k.py
index 3d10bb988..d02c9f8fe 100644
--- a/numpy/compat/py3k.py
+++ b/numpy/compat/py3k.py
@@ -47,7 +47,15 @@ def asstr(s):
return str(s)
def isfileobj(f):
- return isinstance(f, (io.FileIO, io.BufferedReader, io.BufferedWriter))
+ if not isinstance(f, (io.FileIO, io.BufferedReader, io.BufferedWriter)):
+ return False
+ try:
+ # BufferedReader/Writer may raise OSError when
+ # fetching `fileno()` (e.g. when wrapping BytesIO).
+ f.fileno()
+ return True
+ except OSError:
+ return False
def open_latin1(filename, mode='r'):
return open(filename, mode=mode, encoding='iso-8859-1')
diff --git a/numpy/compat/tests/test_compat.py b/numpy/compat/tests/test_compat.py
index 2b8acbaa0..d4391565e 100644
--- a/numpy/compat/tests/test_compat.py
+++ b/numpy/compat/tests/test_compat.py
@@ -1,4 +1,5 @@
from os.path import join
+from io import BufferedReader, BytesIO
from numpy.compat import isfileobj
from numpy.testing import assert_
@@ -17,3 +18,5 @@ def test_isfileobj():
with open(filename, 'rb') as f:
assert_(isfileobj(f))
+
+ assert_(isfileobj(BufferedReader(BytesIO())) is False)