我原来的2.7代码在这里:
myFile = open(prjFile, 'w+')
myFile.write("""<VirtualHost 192.168.75.100:80>
ServerName www.{hostName}
ServerAlias {hostNameshort}.* www.{hostNameshort}.*
DocumentRoot {prjDir}/html
CustomLog \\|/usr/sbin/cronolog /var/log/httpd/class/{prjCode}/\{hostName}.log.%Y%m%d\" urchin"
</VirtualHost>""".format(hostName=hostName, hostNameshort=hostNameshort, prjDir=prjDir, prjCode=prjCode))
myFile.close()
我正在尝试通过以下方式使其与2.4兼容:
myFile = open(prjFile, 'w+')
myFile.write("""<VirtualHost 192.168.75.100:80>
ServerName www.%(hostName)s
ServerAlias %(hostNameshort).* www.%(hostNameshort)s.*
DocumentRoot %(prjDir)s/html
CustomLog \\|/usr/sbin/cronolog /var/log/httpd/class/prjCode}/\%(hostName)s.log.%Y%m%d\" urchin"
</VirtualHost>""" % ('hostName', 'hostNameshort', 'prjDir', 'prjCode'))
myFile.close()
但是我的错误是
Traceback (most recent call last):
File "testfunction.py", line 20, in <module>
</VirtualHost>""" % ('hostName', 'hostNameshort', 'prjDir', 'prjCode'))
TypeError: format requires a mapping
我在这里搜索了答案,但我尝试的任何方法似乎都没有效果。我在这里做错了什么?
最佳答案
错误说明了一切,您需要将tuple
传递给__mod__
时需要映射(dict
)。例如您想要类似的东西:
print """<VirtualHost 192.168.75.100:80>
ServerName www.%(hostName)s
ServerAlias %(hostNameshort)s.* www.%(hostNameshort)s.*
DocumentRoot %(prjDir)s/html
CustomLog \\|/usr/sbin/cronolog /var/log/httpd/class/prjCode}/\%(hostName)s.log.%%Y%%m%%d\" urchin"
</VirtualHost>""" % dict(hostName='foo',hostNameshort='bar',prjDir='baz')
我还需要做其他几件事。我需要在此行上添加
s
:ServerAlias %(hostNameshort).* www.%(hostNameshort)s.*
我需要在最后一行加倍
%
来逃避'%Y%m%d'
中的百分号关于python - Python:2.4格式字符串不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16921568/