TypeError字符串索引必须是整数
Python中的TypeError是什么
TypeError是Python编程语言中的异常之一。当对不支持的对象类型进行操作或者说不是有效对象类型时,会引发此异常。
- 无论何时发生异常,都会引发或发生此异常。
- 正如名称所示,当存在错误的对象时,我们对其执行不相关操作时,就会出现此类错误。
- Python编程语言主要有三种类型的错误:语法错误,逻辑错误, 和 异常。
- 此类错误属于异常错误类别。
- 用户可以使用raise关键字轻松处理类型错误。
TypeError:字符串索引必须是整数
- 如我们所知,字符串的基本结构包含索引值。
- 字符串的起始值从索引值0开始,并将继续到给定字符串的长度。
- 每当我们想要提取字符串的特定字符并指定索引值时,如果我们输入的索引不是整数而是其他不同对象类型的值,就会引发TypeError。
- 例如,如果我们想要从字符串中提取字符2,而我们在索引中输入的却是非整数,将引发类型错误字符串索引必须是整数。
让我们通过示例来理解:
TypeError的示例:字符串索引必须是整数
示例1:给定一个名为”JavaTpoint”的字符串,你需要提取其中的特定字符”T”。
(在这里,我们将讨论上面示例中出现类型错误的所有情况,以及其解决方案。)
情况1:我们在索引中以字符串格式而不是整数值传递数字。
# Python program to fetch the particular character from the string
print("Enter a string: ") # Enter string JavaTpoint
s=input()
print("To fetch out the character 'T' from the string")
s["4"] # As the string begans with index value 0,
# after onwards it will go further by adding 1 to it.
解释:
在上述案例中,我们观察到它生成了一个类型错误:字符串索引必须是整数。这是因为,要从字母表JavaTpoint中提取出字符’T’,我们必须以整数形式传递索引值4,而不是字符串形式。
在这里,我们传递了值4,但不是以整数形式,而是以字符串形式,因为我们将其赋值为双引号。
案例1的输出:
让我们通过下面的修正来详细了解:
案例1的修正:
# Python program to fetch the particular character from the string
print("Enter a string: ") # Enter string JavaTpoint
s=input()
print("To fetch out the character 'T' from the string")
s[4] # As the string begins with index value 0,
# after onwards it will go further by adding 1 to it.
案例1修正的输出:
案例2:我们传递索引的字符串值而不是整数值。
# Python program to fetch the particular character from the string
print("Enter a string: ") # Enter string JavaTpoint
s=input()
print("To fetch out the character ' o ' from the string")
s['o'] # As the string begans with index value 0,
# after onwards it will go further by adding 1 to it.
解释:
在上面的示例中,我们可以观察到,它产生了一个类型错误:字符串的索引必须是整数,因为在这里,要从字母表JavaTpoint中获取字符’o’,我们必须以整数形式传递索引值6,而不是字符串。
在上面的程序中,我们直接传递了字母表,而不是整数值,但是以字符串形式分配了它。
让我们详细理解一下,借助下面提到的纠正方法:
第2种案例的输出:
修正案例2:
# Python program to fetch the particular character from the string
print("Enter a string: ") # Enter string JavaTpoint
s=input()
print("To fetch out the character ' o ' from the string")
s[6] # As the string begins with index value 0,
# after onwards it will go further by adding 1 to it.
修正案例2的输出:
示例2:给出一个名为“Wonderful”的字符串,并且要求从字符串中提取出特定的片段或者可以说是”der”这样的子字符串,我们称之为字符串切片。
情况1:我们在索引值中传递一个字符串格式的数字,而不是整数值。
# Python program to fetch the particular part from the string
print("Enter a string: ") # Enter string Wonderful
s=input()
print("To fetch out the particular slice ' der ' from the string")
s["3":"6"] # As the string begans with index value 0,
# after onwards it will go further by adding 1 to it.
解释:
在上面的情况下,它生成了一个类型错误:字符串索引必须是一个整数,因为在这里,要从字母“Wonderful”中提取出字符串“der”的特定部分,我们必须以整数形式传递索引值3:6,而不是一个字符串。
在上面的程序中,我们需要以字符串形式而不是整数形式传递值3:6,因为我们已经将其分配给了双引号。
The output of case 1:
让我们通过以下纠正来详细了解这个问题:
第一种情况的纠正:
# Python program to fetch the particular part from the string
print("Enter a string: ") # Enter string Wonderful
s=input()
print("To fetch out the particular slice ' der ' from the string")
s[3:6] # As the string begans with index value 0,
# after onwards it will go further by adding 1 to it.
情况1的修正结果输出:
示例3:对于一个字典示例,我们已经给出了一个字典集,我们需要从中获取特定的键及其相应的值。
情况1:当我们在索引中传递字符串值而不是整数值
# Python program to fetch out the particular key with its corresponding value
d1 = { "Shivani" : 19, "Sneha" : 31, "Preeti" : 8, "Abhi" : 50} # declaring a dictionary
for i in d1:
print("Sneha: " + i["Sneha"])
print("Abhi: " + i["Abhi"])
在上述案例中,它生成了一个类型错误:字符串索引必须是整数,因为在这里从字典d1中获取特定的键,比如“Sneha”,我们必须传递整数形式的索引i,而不是字符串。
在上述程序中,我们直接传递了字符串,而不是整数值,但是以字符串形式赋值给它。
案例1的输出:
让我们详细了解一下,借助下面提到的更正:
案例1的更正:
# Python program to fetch out the particular key with its corresponding value
d1 = { "Shivani" : 19, "Sneha" : 31, "Preeti" : 8, "Abhi" : 50} # declaring a dictionary
for i in d1:
print(i)
更正第一种案例的输出:
处理TypeError:字符串索引必须是整数
在上面的示例中,我们看到当我们输入的字符串格式错误时,除了整数值之外,可能会生成typeError。虽然我们已经看到了所有示例的修正,但我们必须知道如何处理所有这些异常情况。
为了在Python编程语言中处理这些异常,我们通常会使用’try’和’except’关键字。我们将在try块中输入所有的测试用例,这些测试用例主要是尽可能多的,其中有生成type error的可能性。我们将在except块中输入我们处理上述异常的方式,并打印出用户定义的错误消息。
让我们通过一个示例来更详细地了解
示例:
# python program to handle the type error exception
l1 = ["Apple", "Mango", "Banana", "Grapes"] # declaring a list
indices = [0, 1, 2, "2", 3]
for i in range(len(indices)):
try:
print(l1[indices[i]]) # case which generates TypeError
except TypeError:
print("TypeError: Check list of indices")
上述异常处理示例的输出: