首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运行函数时出现类型错误

运行函数时出现类型错误
EN

Stack Overflow用户
提问于 2016-11-11 04:30:22
回答 2查看 61关注 0票数 0

我正在尝试使用FileInput来替换文件中的某一行,如果该行中有某个单词。它基本上附加到一个文件中。它运行了,但给了我一个TypeError,我试图找出错误在哪里。

代码语言:javascript
运行
复制
tagname = 'somestring'
def add_tags():
        for line in fileinput.FileInput('/tmp/hosttags.mk',inplace=1):
            if 'end_tags' in line:
                line = line.replace(""" ('end_tags',""", """('%s',
u'/%s',
 [('%s', u'%s tag', [])]),
 ('end_tags',
 u'testing/end_tags_start',
[('end_tag_id', u'end_tag_description', [])])]""") % ( tagname, tagname, tagname, tagname)
            print line.strip()

错误:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "./tag_update.py", line 57, in <module>
    checkmk_srv_tag_update()
  File "./tag_update.py", line 54, in checkmk_srv_tag_update
    add_tags()
  File "./tag_update.py", line 45, in add_tags
    [('end_tag_id', u'end_tag_description', [])])]""") % ( tagname, tagname, tagname, tagname)
TypeError: not all arguments converted during string formatting

文件更新的最终结果:

代码语言:javascript
运行
复制
('house',
u'/house',
[('house', u'house tag', [])]),
('somestring',
u'/somestring', 
 [('somestring', u'somestring tag', [])]),
 ('end_tags',
 u'testing/end_tags_start',
[('end_tag_id', u'end_tag_description', [])])]

谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-11-11 12:40:35

你错误地放置了你的括号,你实际上是在做

代码语言:javascript
运行
复制
line = line.replace("xxx", "%s %s") % (tagname, tagname)

它应该在哪里

代码语言:javascript
运行
复制
line = line.replace("xxx", "%s %s" % (tagname, tagname) )

假设line = 'xxx',替换文本匹配,它将工作,因为它第一次替换为"%s %s" % (tagname, tagname)

当替换文本不匹配时,它会失败,因为它变成了原始行'xxx' % (tagname, tagname),从而出现错误

这个错误也可以通过将if部分改为

代码语言:javascript
运行
复制
if " ('end_tags'," in line:

  • 修复了错误的括号
  • 正如Luke Woodward提到的,你的如果检查是不匹配的替换文本部分,实际上你可以删除if部分,代码也将工作,因为替换将不会发生当替换文本不匹配
  • 而不是%时,建议使用字符串格式line = line.replace("xxx", "{0} {0}".format(tagname) )
票数 0
EN

Stack Overflow用户

发布于 2016-11-17 01:20:16

所有--谢谢你的帮助。

最终代码:

代码语言:javascript
运行
复制
    def srv_tags_update():

        tags_set = []
        for host,tags in ipa_hostgroups_dict.iteritems():
            tags_set += tags

        for host_tag in set(tags_set):
            for line in fileinput.FileInput('/tmp/hosttags.mk',inplace=1):
            #if 'end_tags' in line:
                if """('end_tags',"""  in line:
                    line = line.replace(""" ('end_tags',""", """('%s',
u'/%s',
 [('%s', u'%s tag', [])]),
 ('end_tags',
""")  % ( host_tag, host_tag, host_tag, host_tag  )
                print line.strip()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40536465

复制
相关文章

相似问题

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