【问题标题】:Python Beginner - TypeError: 'str' object is not callablePython初学者-TypeError:'str'对象不可调用
【发布时间】:2018-07-06 21:31:12
【问题描述】:

总的初学者问题,据我所知,我设法错误地分配了一个字符串,但我看不出我哪里出错了。

任何帮助将不胜感激,代码如下:

students = []

def add_student(name, student_id):
    student = {"name": name, "student_id": student_id}
    students.append(student)

while 1 == 1:
try:
    add_student = input("Do you wish to enter the name of a Student (Yes/No)?")
    if add_student == "Yes":
        student_name = input("Enter student name: ")
        print(student_name)
        student_id = input("Enter student ID: ")
        print(student_id)
        print(student_name + ' ' + student_id)
        add_student(student_name, student_id)
        print(student_name+' '+student_id)
        print(*students)
    elif add_student == "No":
        break
    else:
        print("Invalid answer 1")
except KeyError:
    print("Invalid answer 2")

print(*students)

【问题讨论】:

  • 哪一行会抛出这个错误?..
  • 删除add_student(student_name, student_id)...add_student是输入字符串。或者将def add_student替换为def add_studentSomething()
  • 第 4 行,已经是个问题了。 students 在函数外部定义,您在函数内部附加到它。这些是 2 个独立的空间。如果你想保留这个实现,你需要把global students放在开头和函数里面add_student()
  • 正如@Rakesh 所发现的,您对函数和变量使用相同的名称。
  • @Rakesh 不要删除,重命名

标签: python


【解决方案1】:

您调用了函数def add_student(...) 和变量add_student = ...。当变量被调用时,解释器应该如何知道你想要这个函数?

事实上,你已经覆盖了函数。当你调用它时,它已经不存在了。将变量或函数重命名为其他名称。我会让 cmets 帮助您解决代码中的某些其他问题(全局列表...)。

【讨论】:

    【解决方案2】:

    你的函数和局部变量名相同

    students = []
    
    def add_student_data(name, student_id):
        student = {"name": name, "student_id": student_id}
        students.append(student)
    
    while 1 == 1:
    try:
        add_student = input("Do you wish to enter the name of a Student (Yes/No)?")
        if add_student == "Yes":
            student_name = input("Enter student name: ")
            print(student_name)
            student_id = input("Enter student ID: ")
            print(student_id)
            print(student_name + ' ' + student_id)
            add_student_data(student_name, student_id)
            print(student_name+' '+student_id)
            print(*students)
        elif add_student == "No":
            break
        else:
            print("Invalid answer 1")
    except KeyError:
        print("Invalid answer 2")
    
    print(*students)
    

    【讨论】:

      【解决方案3】:

      方法的名称def add_student(name, student_id)和变量的名称add_student = input("你想输入一个学生的名字吗(是/否)?") 是一样的。

      存在类似的问题here

      您必须更改其中之一的名称。

      students = []
      
      
      def add_student(name, student_id):
          student = {"name": name, "student_id": student_id}
          students.append(student)
      
      
      while 1 == 1:
          try:
              user_respond = raw_input("Do you wish to enter the name of a Student (Yes/No)?")
              if user_respond == "Yes":
                  student_name = raw_input("Enter student name: ")
                  print(student_name)
                  student_id = raw_input("Enter student ID: ")
                  print(student_id)
                  print(student_name + ' ' + student_id)
                  add_student(student_name, student_id)
                  print(student_name + ' ' + student_id)
                  print(students)
              elif user_respond == "No":
                  break
              else:
                  print("Invalid answer 1")
          except KeyError:
              print("Invalid answer 2")
      
      print(students)
      

      【讨论】:

        猜你喜欢
        • 2012-04-03
        • 2020-09-16
        • 1970-01-01
        • 1970-01-01
        • 2013-08-05
        • 2012-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多