0

I keep receiving the error message:

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

in relation to line 18 (last line below). And I can't see what I'm doing wrong. I thought the code converts all items in the 'employees' list into lists themselves. So it should not be returning a string error to append to one of these items.

This is my first programme not guided by a crash course book, so apologies if the answer is blindingly obvious

employees=[]
peeps=()
hours=()
total_hours=[]
tip=()
tips=int(input("What was the total tips?: "))
print("Enter employees' names followed by enter. Press x to stop")
while peeps != 'x': #input employee names
  peeps=raw_input("Name: ")
  employees.append(peeps)
def extractEmployees(employees): #covert employees to list of lists
  return [[x] for x in [employees]]
extractEmployees(employees) #run conversion
for x in employees: #input hours worked by each employee
  print("Enter hours for ", x, "individual daily hours followed by enter, or sum of hours worked. Press x when done")
  while hours != 'x': #add hours to employee's list
    hours=int(input())
    x.append(hours)
1
  • You aren't using the list that extractEmployees returns. That function doesn't change the original list; it creates a new one based on the old list, and returns the new list. Commented Aug 4, 2020 at 21:07

2 Answers 2

2

extractEmployees is run but the return value is never used, so employees is never changed. You probably want to assign the output like this: employees = extractEmployees(employees)

However, it's probably preferable to store this output in a new list, so you can still access just the employee's names.

Additionally, using lists to store different types of information like this is confusing. In this case you would probably want to use a dictionary for each employee: {'name': employee_name, 'hours': hours}

Sign up to request clarification or add additional context in comments.

Comments

1

extractEmployees is not set to define or change the value of employees, it only returns a list. You should do employees = extractEmployees(employees) instead of only calling the function. You are getting an AttributeError on line 18 because of the problem you had with extractEmployees, not changing employees to a list of lists, so the item that is supposed to be a list remained as a string.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.