Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError: get() takes no keyword arguments

Tags:

python

I'm new at Python, and I'm trying to basically make a hash table that checks if a key points to a value in the table, and if not, initializes it to an empty array. The offending part of my code is the line:

converted_comments[submission.id] = converted_comments.get(submission.id, default=0)

I get the error:

TypeError: get() takes no keyword arguments

But in the documentation (and various pieces of example code), I can see that it does take a default argument:

https://docs.python.org/2/library/stdtypes.html#dict.get http://www.tutorialspoint.com/python/dictionary_get.htm

Following is the syntax for get() method:

dict.get(key, default=None)

There's nothing about this on The Stack, so I assume it's a beginner mistake?

like image 874
itsmichaelwang Avatar asked Jun 28 '14 03:06

itsmichaelwang


3 Answers

Due to the way the Python C-level APIs developed, a lot of built-in functions and methods don't actually have names for their arguments. Even if the documentation calls the argument default, the function doesn't recognize the name default as referring to the optional second argument. You have to provide the argument positionally:

>>> d = {1: 2}
>>> d.get(0, default=0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: get() takes no keyword arguments
>>> d.get(0, 0)
0
like image 74
user2357112 supports Monica Avatar answered Nov 18 '22 05:11

user2357112 supports Monica


The error message says that get takes no keyword arguments but you are providing one with default=0

converted_comments[submission.id] = converted_comments.get(submission.id, 0)
like image 45
GWW Avatar answered Nov 18 '22 05:11

GWW


Many docs and tutorials, for instance https://www.tutorialspoint.com/python/dictionary_get.htm, erroneously specify the syntax as

dict.get(key, default = None)

instead of

dict.get(key, default)

like image 9
Bertel Avatar answered Nov 18 '22 06:11

Bertel