Python:为什么这个字符串无效?

时间:2013-05-31 17:30:53

标签: python syntax

解决

我有这个字符串:

'  ServerAlias {hostNameshort}.* www.{hostNameshort}.*'.format(hostNameshort=hostNameshort)

但它一直给我一个语法错误。该行应该是这个bash等价物:

echo "    ServerAlias ${hostOnly}.* www.${hostOnly}.*" >> $prjFile

请注意,第一个字符串是myFile.write函数的一部分,但这不是问题,我甚至无法让字符串充分理解它让我运行程序。

回溯:

  File "tomahawk_alpha.py", line 89
    '  ServerAlias {hostNameshort}.* www.{hostNameshort}.*'.format(hostNameshort=hostNameshort)
                                                          ^

但无论我如何更改'符号,它似乎都不起作用。我做错了什么?

回应@mgilson:

    myFile = open(prjFile, 'w+')
    myFile.write("<VirtualHost 192.168.75.100:80>"
                 "  ServerName www.{hostName}".format(hostName=hostName)
                 '  ServerAlias {hostNameshort}.* www.{hostNameshort}.*'.format(hostNameshort=hostNameshort)
                 "  DocumentRoot ", prjDir, "/html"
                 '  CustomLog "\"|/usr/sbin/cronolog /var/log/httpd/class/',prjCode,'/\{hostName}.log.%Y%m%d\" urchin"'.format(hostName=hostName)
                 "</VirtualHost>")
    myFile.close()

我有自己的myFile.write行中的每一行,但它只生成第一行然后退出。所以我假设调用它一次并将它隔开就会产生预期的结果。

2 个答案:

答案 0 :(得分:5)

自动字符串连接仅适用于字符串文字:

"foo"  "bar" 

结果为"foobar"

但是,以下内容不起作用:

("{}".format("foo") 
 "bar")

这类似于你正在做的事情。解析器看到这样的东西:

"{}".format("foo") "bar"

(因为它连接有未确定的括号的行),这显然不是有效的语法。要修复它,您需要显式连接字符串。 e.g:

("{}".format("foo") +
 "bar")

或者在整个字符串上使用字符串格式,而不是一次只使用一个字符串。

答案 1 :(得分:4)

您有几个语法错误。但是,您可能希望查看使用三重引用的字符串 - 从长远来看更容易修改:

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=hn, hostNameshort=hns, prjDir=prjd, prjCode=prjc))