I have the following Python code to write dependency files of a project. It works fine with Python 2.x, but while testing it with Python 3 it reports an error.
depend = None
if not nmake:
depend = open(".depend", "a")
dependmak = open(".depend.mak", "a")
depend = open(".depend", "a")
print >>depend, s,
Here is the error:
Traceback (most recent call last):
File "../../../../config/makedepend.py", line 121, in <module>
print >>depend, s,
TypeError: unsupported operand type(s) for >>:
'builtin_function_or_method' and '_io.TextIOWrapper'
What is the best way to get this working with Python 2.x and 3.x?
In Python 3 the print statement has become a function. The new syntax looks like this:
This breaking change in Python 3 means that it is not possible to use the same code in Python 2 and 3 when writing to a file using the
printstatement/function. One possible option would be to usedepend.write(s)instead of print.Update: J.F. Sebastian correctly points out that you can use
from __future__ import print_functionin your Python 2 code to enable the Python 3 syntax. That would be an excellent way to use the same code across different Python versions.