如何将字符串的最后一个字符分配给变量?

时间:2013-09-16 05:29:12

标签: python python-3.x

我正在尝试将字符串的最后一个字符存储在变量中,而不事先知道该字符串的长度(该字符串最初是从列表中读取的)。我有:

last = record[-1]
lastInd = len(last) - 1
lastChar = last[lastInd]

但是我收到以下错误:

lastChar = last[lastInd]
IndexError: string index out of range

如果我尝试:

lastChar = last[-1]

我得到同样的错误:

lastChar = last[-1]
IndexError: string index out of range

我真的不明白这里出了什么问题?我没有把索引搞定吗?

2 个答案:

答案 0 :(得分:5)

正如inspectorG4dget所说,从last[-1]获取此异常的唯一方法是last是否为空字符串。

如果你想知道如何处理它......那么,这取决于你想要做什么。

通常情况下,如果你想要获取字符串的最后一个字符,你希望它是非空的,所以如果意外地为空,应该是一个错误。

但是如果你想得到最后一个字符,如果字符串是空的,或者是一个空字符串,如果它是,有三种方法可以做到,在(我认为是)pythonic-ness的下降顺序,at至少在新手编写的代码中。

首先,EAFP(“请求宽恕而不是权限更容易。)假设它可以正常工作,try,并在适当时处理意外故障:

try:
    lastChar = last[-1]
except IndexError:
    lastChar = ''

然后是LBYL(在你跳跃之前看)。提前检查意外情况:

if last:
    lastChar = last[-1]
else:
    lastChar = ''

最后,过于聪明。编写三个月后你将无法理解的代码而不考虑它:

lastChar = last[-1:]

这将返回从最后一个到结尾的所有字符。如果有任何字符,则与最后一个字符相同。如果没有人物,那就没什么了。

请注意,这只能按预期工作,因为字符串的各个元素本身就是字符串。如果你试图从这样的列表中获取最后一个元素,你将获得一个包含1个元素或空列表的列表,而不是一个可能的空元素。

答案 1 :(得分:3)

这是因为last是一个空字符串。

检查出来:

>>> last = 'a'
>>> last[-1]
'a'
>>> last = ''
>>> last[-1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

如果你想要一个空字符串作为你的最后一个字符,以防万一你有一个空字符串作为你的最后一个记录,那么你可以试试这个:

if last == '': # or `if not last`
    lastChar = ''

或者,您可以使用三元运算符:

lastChar = last[-1] if last else ''