不明白为什么string.index(" word")不起作用

时间:2014-11-27 20:20:53

标签: python

python中的方法.index("word")可能不起作用吗?我有这个清单:

['Viganello\n', 'Monday\n', '06 | 48\n', '06 | 58\n', '07 | 08\n', '07 | 18\n',
 '07 | 28\n', '07 | 38\n', '07 | 48\n', '07 | 58\n', '08 | 08\n', '08 | 18\n',
 '08 | 28\n', '08 | 38\n', '08 | 48\n', '08 | 58\n', '09 | 08\n', '09 | 18\n',
 '09 | 28\n', '09 | 38\n', '09 | 53\n', '10 | 08\n', '10 | 23\n', '10 | 38\n',
 '10 | 53\n'

字符串列表。然后我打印每个字符串,我要求字符"|"的索引。为什么python找不到这个?这是我的代码:

f = open("Bus 5 Viganello.txt", 'r')
lines = f.readlines()
d = {}
for line in lines:
    line = line.replace('\n','')
    a = line.index("|")

错误为ValueError: substring not found。你能救我吗?

3 个答案:

答案 0 :(得分:2)

你的第一行没有这个角色:

'Viganello\n'

第二个也没有:

'Monday\n'

只有从第三行开始才会出现这个角色:

'06 | 48\n'

我怀疑你想要在那个角色上划分你的线条;不要使用str.index();您可以使用str.split()代替;它具有额外的优点,即使角色不在一行中也能工作。使用:

parts = [part.strip() for part in line.split('|')]

并且您将获得输入行中的元素列表,保留在|字符上。该列表可能只包含一个元素,但这无关紧要。

如果您确实必须拥有|字符的索引,则可以使用str.find()并测试-1以查看其是否缺失,或使用try..except赶上IndexError

a = line.find('|')
if a == -1:
    # oops, no such character

try:
    a = line.index('|')
except IndexError:
    # oops, no such character

答案 1 :(得分:2)

你的一些字符串中没有|,因此例外。我建议使用line.find()代替line.index(),并检查-1的返回值。

答案 2 :(得分:0)

你的第一行:“Viganello \ n”没有“|”,并引发你得到的ValueError。

在获取索引之前检查它:

for line in lines:
    if "|" in line:
        print(line.index("|"))

或者使用try语句来捕获ValueError

或者更简单,使用str.find()而不是str.index(),它不会引发ValueError:

for line in lines:
    print(line.find("|"))