4格式字符串不起作用

4格式字符串不起作用

我原来的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/

10-11 16:33