我不明白为什么" a" + 6 = 24

时间:2015-03-25 17:32:22

标签: python python-3.x

我是一名正在学习计算机科学的学生,我们正在学习尝试:除了:我在这个问题上遇到了障碍,我只是想弄清楚。

  

在本练习中,您应该定义一个名为add_list_values()的函数,该函数传递一个值列表以及两个索引位置。该函数应返回指定索引位置的两个值的总和。

     

例如,如果列表是:

myList = [4,2,6,7,8,1]
     

然后是函数调用:

add_list_values(myList, 2, 4)
     

应该返回值14.

     

这里可能会出现一些问题。首先,如果序列下标超出范围,则将生成IndexError。当然,除非两个操作数都是数字,否则会出现TypeError,表示无法完成添加。

     

定义add_list_values()函数,同时考虑这些可能的异常。请注意:

     
      
  • 如果发生IndexError,则该函数应返回0
  •   
  • 如果发生TypeError,则该函数应返回两个值的字符串连接
  •   

出于某种原因,当我到达第二个列表而不是抛出错误时,我得到答案(24)?

我想知道如何检查列表中的字符串,因此我可以识别此字符串并调用TypeError

def add_list_values(myList, p1, p2):
    try:
        print (myList[p1])
        print (myList[p2])
        answer = myList[p1] + myList[p2]
        return answer

    except IndexError:
        return 0

    except TypeError:
        return str(p1)+str(p2)

#myList = [4,2,6,7,-2,100]
#print(add_list_values(myList, 2, 4))

myList = [4,2,6,7,"a",100]
print(add_list_values(myList, 2, 4))

#myList = [4,2,6,7,-6,100]
#print(add_list_values(myList, 2, -400))    

1 个答案:

答案 0 :(得分:2)

当您catch中的TypeError时,您正在连接两个作为字符串强制转换的索引:

return str(p1) + str(p2)

p1为2,p2为4,因此str(2) + str(4)返回字符串24

如果要返回错误:

except TypeError as e:
    return e   

如果您想加注,则需要使用raise不返回

try / except的整个想法是捕获TypeError而不是引发异常,这正是发生的事情,尝试将字符串"a"添加到int 6确实会导致您捕获的TypeError并返回强制转换为连续的两个索引。