Paolo Bonzini <[email protected]> writes: > On 11/10/2018 13:33, Kevin Wolf wrote: >> 045 1s ... [13:31:47] [13:31:47] [failed, exit status 1] - output >> mismatch (see 045.out.bad) >> --- /home/kwolf/source/qemu/tests/qemu-iotests/045.out 2017-01-24 >> 14:49:48.000000000 +0100 >> +++ /home/kwolf/source/qemu/tests/qemu-iotests/045.out.bad 2018-10-11 >> 13:31:47.266876850 +0200 >> @@ -1,5 +1,26 @@ >> -........... >> ----------------------------------------------------------------------- >> -Ran 11 tests >> - >> -OK >> +Traceback (most recent call last): >> + File "045", line 178, in <module> >> + iotests.main(supported_fmts=['raw']) >> + File "/home/kwolf/source/qemu/tests/qemu-iotests/iotests.py", line 698, >> in main >> + unittest.main(testRunner=MyTestRunner) >> + File "/usr/lib64/python2.7/unittest/main.py", line 95, in __init__ >> + self.runTests() >> + File "/usr/lib64/python2.7/unittest/main.py", line 232, in runTests >> + self.result = testRunner.run(self.test) >> + File "/usr/lib64/python2.7/unittest/runner.py", line 151, in run >> + test(result) >> + File "/usr/lib64/python2.7/unittest/suite.py", line 70, in __call__ >> + return self.run(*args, **kwds) >> + File "/usr/lib64/python2.7/unittest/suite.py", line 108, in run >> + test(result) >> + File "/usr/lib64/python2.7/unittest/suite.py", line 70, in __call__ >> + return self.run(*args, **kwds) >> + File "/usr/lib64/python2.7/unittest/suite.py", line 108, in run >> + test(result) >> + File "/usr/lib64/python2.7/unittest/case.py", line 431, in __call__ >> + return self.run(*args, **kwds) >> + File "/usr/lib64/python2.7/unittest/case.py", line 406, in run >> + result.addSuccess(self) >> + File "/usr/lib64/python2.7/unittest/runner.py", line 62, in addSuccess >> + self.stream.write('.') >> +TypeError: unicode argument expected, got 'str' >> Failures: 045 >> Failed 1 of 1 tests >> >> $ /usr/bin/env python --version >> Python 2.7.15 > > Indeed, io.StringIO exists in Python 2.7 but it's different! If Python > 2 code is not unicode-friendly (it almost never is) it should use > StringIO.StringIO, for example 'six' defines > > six.StringIO: > This is an fake file object for textual data. It’s an alias for > StringIO.StringIO in Python 2 and io.StringIO in Python 3. > > six.BytesIO: > This is a fake file object for binary data. In Python 2, it’s an > alias for StringIO.StringIO, but in Python 3, it’s an alias for > io.BytesIO. > > So the solution seems to be a try/except (and then, better move the > "from X import StringIO" to the top of the file then, rather than > keeping it in def main). > > Paolo
I think we need to invest more resources in Python 2/3 compatiblity, or else we'll miss our hard deadline of January 1, 2020. https://pythonclock.org/
