运行功能时输入错误

时间:2016-11-10 20:30:22

标签: python typeerror

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

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()

错误:

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

文件更新的最终结果:

('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', [])])]

谢谢

2 个答案:

答案 0 :(得分:0)

你错误地把你的括号,你基本上做了

line = line.replace("xxx", "%s %s") % (tagname, tagname)

其中假设是

line = line.replace("xxx", "%s %s" % (tagname, tagname) )

让我们说行=&#39; xxx&#39;,替换文字匹配,它会起作用,因为第一次替换成为"%s %s" % (tagname, tagname)

当替换文本不匹配时,它将失败,因为它变为 原始行'xxx' % (tagname, tagname)  ,因此错误

也可以通过将if部分更改为

来修复错误
if " ('end_tags'," in line:
  • 修正错误的支架
  • 正如卢克伍德沃德所说,你的检查是 不匹配替换文本部分,实际上你可以删除if部分,代码也将工作,因为替换不会发生时 替换文字不匹配
  • 而不是%,建议使用字符串 格式 line = line.replace("xxx", "{0} {0}".format(tagname) )

答案 1 :(得分:0)

全部 - 感谢您的帮助。我需要添加三引号以使其在匹配字符串上工作。

最终代码:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/plain");
startActivityForResult(intent, PICK_FILE);