## A little helper program that capitalizes the first letter of a word
def Cap (s):
s = s.upper()[0]+s[1:]
return s
给我这个错误:
Traceback (most recent call last):
File "\\prov-dc\students\jadewusi\crack2.py", line 447, in <module>
sys.exit(main(sys.argv[1:]))
File "\\prov-dc\students\jadewusi\crack2.py", line 398, in main
foundit = search_method_3("passwords.txt")
File "\\prov-dc\students\jadewusi\crack2.py", line 253, in search_method_3
ourguess_pass = Cap(ourguess_pass)
File "\\prov-dc\students\jadewusi\crack2.py", line 206, in Cap
s = s.upper()[0]+s[1:]
IndexError: string index out of range
答案 0 :(得分:4)
正如其他人已经指出的那样,问题在于您尝试访问空字符串中的项目。您只需使用capitalize
:
'hello'.capitalize()
=> 'Hello'
''.capitalize()
=> ''
答案 1 :(得分:3)
它可能会爆炸,因为没有索引空字符串。
>>> ''[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
正如已经指出的那样,在一个字母上分割一个字符串以调用str.upper()
可以被str.capitalize()
取代。
此外,如果您经常遇到一个空字符串传递的情况,您可以通过以下几种方式处理:
…#whatever previous code comes before your function
if my_string:
Cap(my_string) #or str.capitalize, or…
if my_string
或多或少像if len(my_string) > 0
。
并且总是你们try/except
,但我认为你们首先想要考虑重构:
#your previous code, leading us to here…
try:
Cap(my_string)
except IndexError:
pass
我不会保持结婚以索引字符串以在单个字符上调用str.upper()
,但您可能有一组独特的原因。但是,在所有条件相同的情况下,str.capitalize()
执行相同的功能。
答案 2 :(得分:2)
>>> s = 'macGregor'
>>> s.capitalize()
'Macgregor'
>>> s[:1].upper() + s[1:]
'MacGregor'
>>> s = ''
>>> s[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> s[:1].upper() + s[1:]
''
为什么s [1:]不对空字符串保释?
优雅地处理退化切片索引:也是一个索引 large由字符串大小替换,上限小于 下限返回一个空字符串。
答案 3 :(得分:0)
当我确定我的字符串不为空时,我遇到了同样的错误。所以我想我会在这里分享这个,所以那些得到错误的人有尽可能多的潜在理由。
就我而言,我声明了一个字符串,而python显然将其视为char类型。当我添加另一个角色时它起作用了。我不知道它为什么不自动转换它,但这可能是导致“IndexError:字符串索引超出范围”的原因,即使您认为假定的字符串不为空。
Python版本可能有所不同,我看到最初的问题是指Python 3.当发生这种情况时我使用了Python 2.6。