在Python中输入空字符串时出现索引错误

时间:2014-12-21 22:34:39

标签: python string indexing

所以我正在制作基本的猪拉丁语翻译

word = raw_input("type a word, any word")
first = word[0]
rest = word[1:len(word)]
ay = "ay"

if word.isalpha() and len(word) > 0:
    print (rest + first + ay)
elif len(word) == 0:
    print "invalid entry"
else:
    print "invalid entry"

如果我输入一个空字符串,编译器将返回:

  

IndexError:字符串索引超出范围

如何使它在输入空字符串时代码将返回“无效条目”?

4 个答案:

答案 0 :(得分:4)

如果检查

,只需将您的逻辑移到第一个内部
word = raw_input("type a word, any word")

if word.isalpha() and len(word) > 0:
    first = word[0]
    rest = word[1:len(word)]
    ay = "ay"
    print (rest + first + ay)
elif len(word) == 0:
    print "invalid entry"
else:
    print "invalid entry"

答案 1 :(得分:1)

你只需要检查if word作为空字符串评估为False并使用单个else语句,你的第二个elif是不必要的,因为该单词将至少有一个字符并且不是alpha :

word = raw_input("type a word, any word")

if word.isalpha() and word: 
    first = word[0] # will only try to index if word is not an empty string or not alpha
    rest = word[1:len(word)]
    ay = "ay"
    print (rest + first + ay)
else:
    print "invalid entry"

In [11]: bool("") 
Out[11]: False

In [12]: bool("foo")
Out[12]: True

您也可以使用ternary conditional operator

word = raw_input("type a word, any word")

print word[1:] + word[0] + "ay" if word.isalpha() and word else "invalid entry"

答案 2 :(得分:0)

因为你的错误肯定会指向第二行

first = word[0]

您正在调用字符串中的第一个字符,因为索引从0开始 所以你要求和索引不存在... 如果你要求-1(列表中的倒数第二个字符),你也会得到更多的索引错误。 所以当你意识到索引范围时你应该只询问索引值,所以在另一个答案中说明了if语句中的代码行2-3块检查索引值这使得代码仍然通过保证值保持动态稳定如果您希望将后者用作错误消息的一部分,则设置“ay”;我也删除了重复的elif语句,假设你不知道它是否因为它有数字或因为它的len而失败。
请注意,如果字符串中包含连字符“ - ”或类似的字符,isalpha将返回false!

word = raw_input("type a word, any word")
ay = "ay"
if word.isalpha() and len(word) > 0:
    first = word[0]
    rest = word[1:len(word)]
    print (rest + first + ay)
else:
    print "invalid entry"

答案 3 :(得分:0)

  1. word[1:len(word)]替换为word[1:]
  2. 这不会解决您的问题。想一个长度等于一的单词。
  3. 首先检查单词是否为None而不是“”。
  4. 检查字长是否大于零。
  5. 检查字长是否更大并设置休息。