python 函数签名中的“TypeError:”type“对象不可订阅”

alen0pnh  于 2023-02-02  发布在  Python
关注(0)|答案(4)|浏览(194)

为什么我在运行此代码时收到此错误?

Traceback (most recent call last):                                                                                                                                                  
  File "main.py", line 13, in <module>                                                                                                                                              
    def twoSum(self, nums: list[int], target: int) -> list[int]:                                                                                                                    
TypeError: 'type' object is not subscriptable
nums = [4,5,6,7,8,9]
target = 13

def twoSum(self, nums: list[int], target: int) -> list[int]:
        dictionary = {}
        answer = []
 
        for i in range(len(nums)):
            secondNumber = target-nums[i]
            if(secondNumber in dictionary.keys()):
                secondIndex = nums.index(secondNumber)
                if(i != secondIndex):
                    return sorted([i, secondIndex])
                
            dictionary.update({nums[i]: i})

print(twoSum(nums, target))
kgsdhlau

kgsdhlau1#

以下答案仅适用于Python〈3.9

表达式list[int]试图为对象list添加下标,对象list是一个类。类对象的类型是其元类的类型,在本例中为type。由于type没有定义__getitem__方法,因此无法执行list[...]
要正确地执行此操作,需要导入typing.List并在类型提示中使用它,而不是内置的list

from typing import List

...

def twoSum(self, nums: List[int], target: int) -> List[int]:

如果要避免额外的导入,可以简化类型提示以排除泛型:

def twoSum(self, nums: list, target: int) -> list:

或者,您可以完全摆脱类型提示:

def twoSum(self, nums, target):
jmo0nnb3

jmo0nnb32#

上面“Mad Physicist”给出的答案是有效的,但是Python 3.9新特性的这一页建议“list[int]”也应该有效。
https://docs.python.org/3/whatsnew/3.9.html
但是我不喜欢,也许我的系统还不支持Python 3.9的这个特性。

zynd9foi

zynd9foi3#

“类型错误:尝试使用索引访问数据类型为“type”的对象时,将引发"type“object is not subscriptable”错误。若要解决此错误,请确保仅尝试使用索引访问可迭代对象(如元组和字符串)。

33qvvth1

33qvvth14#

将@Nerxis的评论提升为答案。
对于Python 3.7和3.8,添加:

from __future__ import annotations

作为模块的第一个导入。
虽然使用List而不是list是可以接受的,但当您需要执行pd.Series[np.int64]时,它不会对您有帮助。

相关问题