diff options
Diffstat (limited to 'numpy/compat')
-rw-r--r-- | numpy/compat/py3k.py | 10 | ||||
-rw-r--r-- | numpy/compat/tests/test_compat.py | 3 |
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) |