索引超出范围,如果没有if语句python3

时间:2017-09-22 12:31:30

标签: python python-3.x

为什么我用这个函数得到错误“index out of range”:

def encode(x):
     diff_char = x[0]
     max_ind = len(x)
     i = 1
     while i < max_ind and diff_char == x[i]:
         i += 1
     return str(i) + diff_char + encode(x[i:])

为什么我可以通过这样的if-else语句来完成?

def encode(x):
    if not x:
        return ""
    else:
        diff_char = x[0]
        max_ind = len(x)
        i = 1
        while i < max_ind and diff_char == x[i]:
            i += 1
        return str(i) + diff_char + encode(x[i:])

2 个答案:

答案 0 :(得分:2)

如果字符串为空,即x = '',则访问索引0将失败:

>>> x = ''
>>> x[0]
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    x[0]
IndexError: string index out of range

这只是因为字符串在索引0处没有第一个字符。

首先检查x的真实性,明确处理x为空字符串的情况。因此,在这种情况下,您只需从函数返回,x[0]永远不会尝试读取第一个字符。

答案 1 :(得分:0)

这是因为你在这种情况下使用python manage.py migrate &#34; i&#34;等于你的列表x的长度,并再次你递归调用你的函数,在这种情况下,如果x的长度是2然后我将在这里2和x [2:]将给你空白列表,当你调用编码函数然后你访问x [0],但你的x是空列表。