-1

我正在尝试编写一个在推文中突出显示主题标签的程序。但是如果推文包含一个新行,程序将失败,如果它只有一行,程序将工作。为什么数据中有新行时会失败?我得到错误index out of range

def highlight(data):
    for word in data.split(" "):
        if word[0] == "#":
            print "<FONT COLOR=\"brown\">" + word + "</FONT>",
        else:
            print word,

highlight("""hello world this
    is a #test that i am #writing.""")
4

4 回答 4

2

此代码将起作用:

def highlight(data):
    for word in data.split():
        if word[0] == "#":
            print "<FONT COLOR=\"brown\">" + word + "</FONT>",
        else:
            print word,

highlight("""hello world this
    is a #test that i am #writing.""")

这将按换行符和空格拆分文本。

于 2013-10-28T01:22:53.410 回答
1

因为换行符会使data.split(" ")contains ''s。您正在尝试获取其中的第一个元素,并且,好吧:

In [4]: ''[0]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-4-6f70a0cbdc74> in <module>()
----> 1 [][0]

IndexError: list index out of range

In [6]: a = """
   ...: hello world this
   ...:     is a #test that i am #writing."""

In [7]: a.split(' ')
Out[7]:
['\nhello',
 'world',
 'this\n',
 '',
 '',
 '',
 'is',
 'a',
 '#test',
 'that',
 'i',
 'am',
 '#writing.']

只需将其更改为data.split(),您会没事的。

于 2013-10-28T01:23:06.490 回答
1

在推文第二行的开头,有四个空格。

"""test
    other_test""" == "test\n    other_test"

所以如果你用空格分割那个字符串,你会得到三个空字符串。

>>> "test\n    other_test".split(" ")
['test\n', '', '', '', 'other_test']

现在,如果您尝试访问 string 的第一个字符'',则字符索引超出范围。

为防止出现此错误,请使用data.split()或检查当前字符串是否为空。

于 2013-10-28T01:24:02.217 回答
1

确保您首先有一个“单词”:

def highlight(data):
    for word in data.split(" "):
        if word and word[0] == "#":
            print "<FONT COLOR=\"brown\">" + word + "</FONT>",
        else:
            print word,

将来询问时,包含错误消息的全文会有所帮助。

于 2013-10-28T01:24:39.410 回答