首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: 2.4格式字符串不起作用

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

Stack Overflow用户
提问于 2013-06-04 23:19:46
回答 3查看 1.6K关注 0票数 1

我最初的2.7代码如下:

代码语言:javascript
复制
            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兼容:

代码语言:javascript
复制
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()

但我的错误是

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

我已经在这里寻找了答案,但我所尝试的似乎都不起作用。我在这里做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-04 23:22:54

这个错误说明了一切,当__mod__需要一个映射(dict)时,您正在向它传递一个tuple。例如,你想要这样的东西:

代码语言:javascript
复制
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

代码语言:javascript
复制
ServerAlias %(hostNameshort).* www.%(hostNameshort)s.*

为了避开'%Y%m%d'中的百分号,我需要在最后一行中将%加倍

票数 5
EN

Stack Overflow用户

发布于 2013-06-04 23:24:07

您可以从格式字符串中删除名称,如将%(hostNameshort)s转换为%s或将数据作为字典提供。

票数 1
EN

Stack Overflow用户

发布于 2013-06-04 23:31:38

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16921568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档