본문 바로가기

Python/Error Handling

TypeError: method() takes no keyword arguments

*바쁘신 분들을 위한 빠른 해결법

## test_dict.get("k1", default=0)    	## default라는 설명을 적은것이 에러의 원인
test_dict.get("k1", 0)             	## default라는 설명을 제거하면 된다.

 

 

 


해당 에러는 왜 발생하는가?

no keyword argument 에러는 python의 함수에서 Keyword Argument를 사용할 수 없기 때문입니다. 이러한 함수는 주로 Built-in function에서 발생합니다.

Python function은 Position Arguments와 Keyword Arguments를 사용할 수 있다

 

Python은 원래 Keyword Argument를 자유롭게 사용할 수 있습니다. 하지만 python에서 제공하는 Built-in function은 C-level API이기 때문에 Keyword Arguments가 제공되지 않습니다. built-in function을 사용하실 때는 positon Arguments를 사용하는 것을 보통 추천드립니다..

* C/C++에서 compile 된 함수들을 사용한다 생각하면 됩니다. position Arguments만 가질 뿐, keyword Arguments를 가지지 않습니다.

 

사실 이런 에러의 원인은 찾기 쉽지 않습니다. 왜냐하면 보통은 코드의 품질을 올리기 위해 keyword를 작성할 때 생기는 에러이기 때문입니다. 심지어 C-level에서 만들어진 python built-in function에서만 생기는 생소한 경우입니다.

 

좀 더 자세한 설명을 위해 dict.get() method를 사용해 보겠습니다.

 

 


dictionary type의 .get() 예시

python.org에서 dictionary type(이하 dict)가 사용하는 method 중에 get(key[, default])를 찾아볼 수 있습니다.

이 method는 dict가 가지고 있는 key값을 찾아 value를 출력하고, 못찾으면 default로 지정된 값을 출력합니다.

dictionary가 의 get() method 설명

 

parameter 첫 번째로 key, 두 번째는 default를 받습니다. 하지만 이 parameter를 Keyword Argument로는 사용할 수 없고, Position Argument로만 받을 수 있습니다. code를 실제로 작성하다가 설명을 확인해 보면 argument name이 다르다는 것을 확인할 수 있습니다.

실제로 dict.get method는 __key를 받는다고 되어 있다.

 

그래도 Keyword Arguments을 억지로 사용하려고 하면 아래와 같은 에러가 발생하게 됩니다.

이를 무시하고 argument를 넣어도 에러는 동일하다.

 

이런 에러를 해결하려면 Position Arguments 방식으로 적어야 합니다.

keyword를 제거하면 에러가 사라진다.

 

 


*reference

https://docs.python.org/3/library/stdtypes.html?highlight=dict%20get#dict.get