歌者文明清理员 发表于 2023-4-22 14:39:08

TypeError: 'type' object is not subscriptable

代码:
def f(a: tuple) -> int:
    return a+a

sfqxx 发表于 2023-4-22 14:56:06

本帖最后由 sfqxx 于 2023-4-22 14:58 编辑

错误信息“TypeError:'type' object is not subscriptable”表示您尝试在类型对象上使用下标符号(即方括号[]),这是不允许的,因为类型是不可变的,并且没有可以使用索引访问的元素。

在给定的代码中,没有语法错误,但由于输入参数或函数调用,似乎可能会引发此TypeError。

为了解决此错误,请确保将整数元组作为参数传递给“f()”函数。您可以使用内置的“type()”函数在将其传递到函数之前检查参数的数据类型来验证这一点。

例如:

# correct usage
arg = (2, 3)
print(f(arg))# output: 5

# incorrect usage
arg =    # not a tuple!
print(f(arg))# raises TypeError

有用请设置最佳答案

歌者文明清理员 发表于 2023-4-22 15:09:13

sfqxx 发表于 2023-4-22 14:56
错误信息“TypeError:'type' object is not subscriptable”表示您尝试在类型对象上使用下标符号(即方括 ...

我都没调用函数,他就报错,就是定义完就报错

liuhongrun2022 发表于 2023-4-22 15:09:30

有什么问题

歌者文明清理员 发表于 2023-4-22 15:09:45

liuhongrun2022 发表于 2023-4-22 15:09
有什么问题

标题

liuhongrun2022 发表于 2023-4-22 15:11:26

本帖最后由 liuhongrun2022 于 2023-4-22 15:14 编辑

歌者文明清理员 发表于 2023-4-22 15:09
标题
能用啊
>>> def f(a: tuple) -> int:
    return a+a

>>> f((1,2))
3

歌者文明清理员 发表于 2023-4-22 15:14:12

liuhongrun2022 发表于 2023-4-22 15:11
能用啊

怎么会?

sfqxx 发表于 2023-4-22 15:14:23

歌者文明清理员 发表于 2023-4-22 15:09
我都没调用函数,他就报错,就是定义完就报错

截个图好吗?

歌者文明清理员 发表于 2023-4-22 15:15:48

sfqxx 发表于 2023-4-22 15:14
截个图好吗?

人工判断已启动,请看7楼

liuhongrun2022 发表于 2023-4-22 15:16:38

歌者文明清理员 发表于 2023-4-22 15:14
怎么会?

GPT:(不一定对)
您提供的代码中,使用了类型注解 tuple 来表示参数类型为包含两个整数的元组,返回值类型为整数。在 Python 3.7 中,不支持 tuple 等泛型类型注解,因此会报错。

sfqxx 发表于 2023-4-22 15:18:38

是不是用了中文符号

歌者文明清理员 发表于 2023-4-22 15:19:12

liuhongrun2022 发表于 2023-4-22 15:16
GPT:(不一定对)

得py3.8????哎,我不想再改python版本了,py3.12>py3.11>py3.10>py39>py38>py37每个版本都蹭过,这就是我之前在py399的代码,现在简化函数还是报错

解决方案?(我问过我的chatgpt了,和sfqxx的一样)

歌者文明清理员 发表于 2023-4-22 15:20:22

sfqxx 发表于 2023-4-22 15:18
是不是用了中文符号

liuhongrun2022 发表于 2023-4-22 15:20:24

歌者文明清理员 发表于 2023-4-22 15:19
得py3.8????哎,我不想再改python版本了,py3.12>py3.11>py3.10>py39>py38>py37每个版本都蹭过,这就 ...

我的py3.10能用

sfqxx 发表于 2023-4-22 15:21:08


def f(a:tuple) -> int:
    return a+a

sfqxx 发表于 2023-4-22 15:21:55

空格去掉试试
还是看我们人类吧

歌者文明清理员 发表于 2023-4-22 15:23:24

liuhongrun2022 发表于 2023-4-22 15:20
我的py3.10能用

解决方案?我记得好像是注解(annotions),但是
Python 3.7.8rc1 (tags/v3.7.8rc1:5f3933d61d, Jun 17 2020, 16:59:29) on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> from __future__ import annotions
SyntaxError: future feature annotions is not defined

liuhongrun2022 发表于 2023-4-22 15:23:42

歌者文明清理员 发表于 2023-4-22 15:20


试试这个呢?
from typing import Tuple

def f(a: Tuple) -> int:
    return a+a

print(f((1,2)))

歌者文明清理员 发表于 2023-4-22 15:23:55

sfqxx 发表于 2023-4-22 15:21
空格去掉试试
还是看我们人类吧

liu说了,是版本问题

歌者文明清理员 发表于 2023-4-22 15:25:18

liuhongrun2022 发表于 2023-4-22 15:23
试试这个呢?

啊可以
现在已经找到了问题,annotions拼错了,看图:
页: [1] 2
查看完整版本: TypeError: 'type' object is not subscriptable