Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialaaron roberts
2,004 Pointsunpacking question.
can anyone tell me why this code doesn't run interms of unpacking?
def league(*teams):
team1, team2, team3 = teams
print(team1)
prem = ["arsenal", "chelsea", "liverpool"]
league(prem)
'ValueError: not enough values to unpack (expected 3, got 1)' is what is return but considering there is 3 strings in the list i don't understand what the problem is?
2 Answers
AJ Tran
Treehouse TeacherHi aaron roberts !
prem = ["arsenal", "chelsea", "liverpool"]
league(prem)
# => ValueError: not enough values to unpack (expected 3, got 1)
prem
counts as one value, since it is one list!
The notation you'll want is:
league('arsenal', 'chelsea', 'liverpool')
# => arsenal
Try this out and see :)
aaron roberts
2,004 Pointsthanks! i think i just covered this in one of the courses, so the * in the argument counts towards there being more values?
Alexis Othonos
3,171 PointsThe asterisk (*) works only on iterables.
So if you know that what you are passing is a list, tuple, etc. then you can safely add the asterisk to unpack the values.
Try with print function
prem = ["arsenal", "chelsea", "liverpool"]
teams = 3
# pass list as a single element, therefore the list as an element will be printed:
print(prem)
# ['arsenal', 'chelsea', 'liverpool']
# pass list arguments individually by unpacking. The print function can automatically handle multiple arguments
print(*prem)
# arsenal chelsea liverpool
# unpack non iterable value in function:
print(*teams)
# TypeError
Hope this helps
aaron roberts
2,004 Pointsaaron roberts
2,004 PointsThanks!
Alexis Othonos
3,171 PointsAlexis Othonos
3,171 PointsOr you can unpack the list before passing it as an argument:
AJ Tran
Treehouse TeacherAJ Tran
Treehouse TeacherAlexis Othonos, you're a real MVP! aaron roberts, make sure you see this other answer!!