我最初的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我已经在这里寻找了答案,但我所尝试的似乎都不起作用。我在这里做错了什么?
发布于 2013-06-04 23:22:54
这个错误说明了一切,当__mod__需要一个映射(dict)时,您正在向它传递一个tuple。例如,你想要这样的东西:
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'中的百分号,我需要在最后一行中将%加倍
发布于 2013-06-04 23:24:07
您可以从格式字符串中删除名称,如将%(hostNameshort)s转换为%s或将数据作为字典提供。
发布于 2013-06-04 23:31:38
删除字符串的名称并将其替换为"%s“,然后将每个变量映射到它(必要时重复)。此外,移除或更改部件
".log.%Y%m%d\“
因为它也在尝试映射,但找不到相应的值
https://stackoverflow.com/questions/16921568
复制相似问题