TypeError: ‘int’ 对象在 Python 中不可订阅

TypeError: ‘int’ 对象在 Python 中不可下标

TypeError: ‘int’ object is not subscriptable in Python

当我们尝试使用方括号访问特定索引处的整数时,会出现 Python“TypeError: ‘int’ object is not subscriptable”。

要解决该错误,请先将整数转换为字符串,然后再通过索引访问它,例如str(integer)[0].

typeerror int 对象不可订阅

下面是错误如何发生的示例。

主程序
my_int = 246810 # ⛔️ TypeError: 'int' object is not subscriptable print(my_int[0])

我们声明了一个存储整数的变量,并尝试在特定索引处访问它。

整数不可下标(无法在索引处访问)。

将整数转换为字符串或更正赋值

要解决该错误,请使用str()类将整数转换为字符串或更正变量的赋值。

主程序
my_int = 246810 result = str(my_int) print(result[0]) # 👉️ 2 print(result[1]) # 👉️ 4 print(str(my_int)[0]) # 👉️ 2

字符串对象是可订阅的,因此将整数转换为字符串可以解决错误。

如果需要访问,可以使用方括号:

  • 特定索引处的字符串
  • 特定索引处的列表
  • 特定索引处的元组
  • 字典中的特定键

如果您错误地将整数分配给代码中某处的变量,则必须更正对字符串、列表、元组或字典的分配才能使用方括号。

主程序
my_list = 246810 # ⛔️ TypeError: 'int' object is not subscriptable print(my_list[0])

my_list变量被分配了一个整数,因此尝试访问索引处的整数会引发错误。

在这种情况下,您必须追踪变量被分配整数的位置并更正分配。

使用格式化字符串文字将整数转换为字符串

您还可以使用
格式化字符串文字将整数转换为字符串,以便能够在索引处访问它。

主程序
my_integer = 246810 result = f'{my_integer}' print(result[0]) # 👉️ 2 print(f'{my_integer}'[0]) # 👉️ 2

格式化字符串文字 (f-strings) 让我们通过在字符串前加上f.

主程序
var1 = 'bobby' var2 = 'hadz' result = f'{var1}{var2}' print(result) # 👉️ bobbyhadz

确保将表达式括在大括号 – 中{expression}

我们不必明确地使用该类,str()因为 f-strings 会自动将方括号中的值转换为字符串。

解决使用整数列表时的错误

在处理整数列表时也通常会导致该错误。

主程序
list_of_integers = [2, 4, 6, 8] # ⛔️ TypeError: 'int' object is not subscriptable result = list_of_integers[0][0]

该语法list[0][0]尝试访问列表中第一个整数的第一个数字。

如果您需要访问列表元素的特定数字,请将该元素转换为字符串。

主程序
list_of_integers = [24, 46, 80] first_element = str(list_of_integers[0]) print(first_element) # 👉️ 24 print(first_element[0]) # 👉️ 2

如果您需要更新列表中的值,请使用以下语法。

主程序
list_of_integers = [24, 46, 80] list_of_integers[0] = 100 list_of_integers[1] = 999 print(list_of_integers) # 👉️ [100, 999, 80]

如果您需要访问列表项的特定数字,请先将该项目转换为字符串。

主程序
list_of_integers = [24, 46, 80] result = str(list_of_integers[0])[0] print(result) # 👉️ 2

我们访问了第一个列表项中的第一个数字。

input() 函数总是返回一个字符串

如果您在使用该函数时遇到错误input(),请注意input()
始终返回一个字符串。

主程序
# ✅ Take user input integer value user_input = int(input('Enter an integer: ')) print(user_input) # ------------------------------------------------ # ✅ Take user input integer value with validation try: user_input = int(input('Enter an integer: ')) print(user_input) except ValueError: print('Enter a valid integer')

该函数总是返回一个字符串,因此如果需要将结果转换为整数,则input必须使用
int()类。

将整数拆分为数字列表

如果您需要将整数拆分为数字列表,
请使用列表理解

主程序
my_int = 246810 my_list = [int(x) for x in str(my_int)] print(my_list) # 👉️ [2, 4, 6, 8, 1, 0]

我们使用该类str()将整数转换为字符串。

在列表理解的每次迭代中,我们使用该类int()将当前数字转换为整数并返回结果。

对一个整数的数字求和

如果需要对整数的数字求和,可以使用相同的方法。

主程序
my_int = 246810 result = sum(int(digit) for digit in str(my_int)) print(result) # 👉️ 21

访问整数的特定数字

如果您只是想访问整数的特定数字,将值转换为字符串就足够了。

主程序
my_int = 246810 my_str = str(my_int) print(my_str[0]) # 👉️ 2 print(my_str[1]) # 👉️ 4 print(my_str[-1]) # 👉️ 0 print(my_str[:2]) # 👉️ 24

字符串切片的语法
my_str[start:stop:step].

索引start是包含的,而stop索引是排他的(最多,但不包括)。

如果start省略索引,则认为是0,如果stop省略索引,则切片转到字符串的末尾。

Python 索引是从零开始的,因此字符串中的第一个字符的索引为0,最后一个字符的索引为-1or len(my_str) - 1

“对象不可订阅”TypeError 基本上意味着无法使用方括号访问对象。

您应该只使用方括号来访问可订阅对象。

Python 中的可订阅对象是:

  • 列表
  • 元组
  • 字典
  • 细绳

必须使用list()
tuple()
dict()或类将所有其他对象转换为可订阅对象
str(),以便能够使用括号表示法。

可订阅对象实现该__getitem__方法,而非可订阅对象不实现。

主程序
a_list = [4, 6, 8] # 👇️ <built-in method __getitem__ of list object at 0x7f71f3252640> print(a_list.__getitem__)

# 额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: