TypeError:尝试获取用户inpu时,无法调用“tuple”对象

2024-05-16 08:47:48 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行我的代码时,我会遇到这样的错误,但我不明白这意味着什么,我试图搜索类似的情况,但我没有找到任何东西,这是我按下no responder时得到的错误

Traceback (most recent call last):                                                                                                             
  File "/home/main.py", line 27, in <module>                                                                                                   
    dataCheck(data);                                                                                                                           
  File "/home/main.py", line 24, in dataCheck                                                                                                  
    values=data();                                                                                                                             
TypeError: 'tuple' object is not callable

下面是我写的代码:

^{pr2}$

Tags: no代码inpyhomedatamain错误
3条回答

在一个级别上,您犯了一个错误,因为您将data定义为函数返回的内容,并最终尝试使用data作为您最初定义的函数(Python抱怨您试图将元组用作函数:TypeError: 'tuple' object is not callable)。为函数和播放器信息使用不同的名称将足以解决您的问题。在

在另一个层次上,你的函数命名错误。函数表示操作,因此您应该尝试为它们使用操作名称。dataCheck是可以的,(或者{}如果你想重读动词),data不好,get_data可以,但是{}甚至更好,再加上{}。在


作为第一个脚注,与name=data[0];等不同的是,将整个元组/列表像a, b, c = data那样进行解压更为惯用。在


第二,你的dataCheck没有产生结果。。。如果data需要编辑,您将得到新的values,但是{}不会被函数修改。在


第三个也是最后一个,如果您想在checkData中编辑data,请不要这样做

    elif yn == 'n':
        data = get_data()

因为这将创建一个本地赋值,它不会在调用方的名称空间级别产生反响。在

始终使用一些唯一的变量名或注意函数/变量名。在您的例子中,由于名称相同,它将数据视为元组,而不是您要引用的元组。 请比较您的代码和下面的代码之间的差异。在

print("Welcome to the game!");


def Input_data():
    name=input("Give me your name: ");
    lname=input("Give me your last name: ");
    age=int(input("Give me your age: "));
    return (name,lname,age);

def dataCheck(data):
    name=data[0];
    lname=data[1];
    age=str(data[2]);
    print("Your name: "+name);
    print("Your Last name: "+lname);
    print("Your age: "+age);
    yn=input("The information are true Y/N :");
    if yn.lower()=="y":
        print("Welcome "+name);
    elif yn.lower()=="n":
        values=Input_data();
        dataCheck(values);
data=Input_data();
dataCheck(data);

名称空间冲突。一旦你说data = data(),函数{}就消失了,所以当你用values = data()调用它时,你试图调用它之前返回的值。在

试试这个。在

print("Welcome to the game!")

def get_data():
    name = input("Give me your name: ")
    lname = input("Give me your last name: ")
    age = int(input("Give me your age: "))
    return (name, lname, age)

def data_check(data):
    name, lname, age = data
    print("Your name: " + name)
    print("Your Last name: " + lname)
    print("Your age: " + str(age))
    yn = input("The information are true Y/N :")
    if yn.lower() == "y":
        print("Welcome " + name)
    elif yn.lower() == "n":
        data_check(get_data())

data_check(get_data())

请注意我也是

  • 删除了分号(在Python中不需要分号)
  • snake_cased函数data_check(这是惯例)
  • data_check()中使用元组解包而不是单独赋值,这是一个方便快捷的方法

相关问题 更多 >