为什么在将输入值传递给函数参数时会出错,而在静态分配时却不会?

Why do I get an error when passing input value into function parameter but not when statically assigning it?

当我在“printPeople”参数中手动输入“alex”时,代码打印正常。

class people:  
    name = ''
    age = ''

alex = people()
alex.name = 'Alex'
alex.age = '25'

clarance = people()
clarance.name = 'Clarance'
clarance.age = '24'

def printPeople(person):
    print('-' * 20)
    print('Name:', person.name)
    print('Age:', person.age)
    print('-' * 20)

printPeople(alex)

但是,如果我尝试使用输入功能手动选择名称:

class people:  
name = ''
age = ''

alex = people()
alex.name = 'Alex'
alex.age = '25'

clarance = people()
clarance.name = 'Clarance'
clarance.age = '24'

def printPeople(person):
    print('-' * 20)
    print('Name:', person.name)
    print('Age:', person.age)
    print('-' * 20)

userInput = input('Enter name: ')
printPeople(userInput)

我收到一个错误:

AttributeError: 'str' object has no attribute 'name'

alex是一个变量

printPeople(alex)

不是像 input returns

这样的 str
# Wrong
printPeople("alex")

如果您希望在程序中输入 select 数据,请使用 dict,您可以使用用户输入对其进行索引。

people_data = {"alex": alex}

...

printPeople(people_data[userInput])

您的 printPeople 函数需要一个 people 值,或者至少是具有 nameage 属性的某个值。当您调用 printPeople(input()) 时,您将一个字符串传递给 printPeople。该字符串没有所需的属性。

您正在传递一个字符串对象,但它没有属性名称。 你必须知道在 python 中一切都是对象。

在这两行中,您试图访问实例的属性名称和年龄,因此出现错误。 打印('Name:',person.name) 打印('Age:', person.age)