Python:2.4格式字符串不起作用

2024-09-30 20:35:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我原来的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兼容:

^{pr2}$

但我的错误是

Traceback (most recent call last):
  File "testfunction.py", line 20, in <module>
    </VirtualHost>""" % ('hostName', 'hostNameshort', 'prjDir', 'prjCode'))
TypeError: format requires a mapping

我在这里寻找答案,但我所尝试的一切似乎都没有奏效。我做错什么了?在


Tags: 代码logformatwwwopenmyfilehostnamewrite
3条回答

您可以从格式字符串中删除名称,例如%(hostNameshort)s到{},或者将数据作为字典提供。在

这个错误告诉我们,当一个tuple需要一个映射(dict)时,您正在将tuple传递给__mod__。e、 g.你想要这样的东西:

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

^{pr2}$

我需要将最后一行中的%加倍,以转义'%Y%m%d'中的百分号

删除字符串的名称并替换“%s”的名称,然后将每个变量映射到它(必要时重复)。此外,拆除或更换零件

".log.%Y%m%d\"

因为它也在尝试映射,但找不到相应的值

相关问题 更多 >