Issue 9293: Unsupported IO operations should raise UnsupportedOperation
Some of them currently raise IOError. Fortunately, UnsupportedOperation inherits from IOError, which means compatibility can be preserved.
Contrast:
>>> open("LICENSE").write("bar")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: not writable
With:
>>> open("LICENSE", "rb").write(b"")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
io.UnsupportedOperation: write
Or:
>>> io.StringIO().fileno()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
io.UnsupportedOperation: fileno
Or, unfortunately:
>>> open("LICENSE", "rb", buffering=0).write(b"")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: File not open for writing
Another kind of unsupported operation is non-absolute seeking on a TextIOWrapper:
>>> open("LICENSE").seek(1, 1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: can't do nonzero cur-relative seeks