TypeError: get() takes no keyword arguments

Question:

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?

Asked By: itsmichaelwang

||

Answers:

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)
Answered By: GWW

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
Answered By: user2357112

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)

Answered By: Bertel
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.