I'm trying to have a function write to a file with 4 different string variables passed into what is written, but for whatever reason when this is attempted, I get this:
Traceback (most recent call last):
File "C:\Python Files\writePy\writePy.py", line 34, in <module>
indent = writeIf(mFile, genCond(), lFile, indent)
File "C:\Python Files\writePy\writePy.py", line 23, in writeIf
file.write('%sif (%s %s %s):' (indentation, cond[0], cond[1], cond[2]))
TypeError: 'str' object is not callable
This is my main code:
# Main code
lFile = open('OperationLog.txt', mode='w') # Log file for changes
mFile = open('Evolve.txt', mode='w+') # File to be edited
indent = 0 # Indentation for written code
# Write two IF statements with a randomized condition to file, update indentation
indent = writeIf(mFile, genCond(), lFile, indent)
indent = writeIf(mFile, genCond(), lFile, indent)
# Close files
lFile.close()
mFile.close()
and this is the function the error is in:
def writeIf(file, cond, log, indent):
indentation = ' ' * (4 * indent) # Number of spaces to add is 4 * indent
file.write('%sif (%s %s %s):' (indentation, cond[0], cond[1], cond[2]))
indent = indent + 1
log.write('Added: IF statement to %s.' % file.name)
return indent
You forgot the modulo operator (
%
):Use the
format()
function in cases as this as its more suitable and easy to maintainThough these answers definitely address your problem, you should also be aware of the logging module.
Then your function would look like this:
You have to use string formatting:
Without the modulo operator (%), Python interprets it indeed as a function call: