python error: do_this( ) takes 1 positional argument but 15 were given
해당 에러는 파이썬에서 나타나는 전달된 인자 갯수와 관련된 에러타입이다
함수는 위치 인자를 1개 취하는데, 이 개수보다 많은 인자가 위치 인자로 전달되었거나,
특정하게 지정되지 않은 인자가 전달되지 않았을 때 나타나는 에러이다.
이 상황은 주로 2가지 상황에서 나타나는 것 같은데..
첫번째는 class 함수에 self 가 들어가지 않았을 때
위 첫번재 에러의 경우에는 아직 코드로 구현을 하지 않아서 . 나중에 참고하기 위해
링크를 남겨둔다
TypeError: method() takes 1 positional argument but 2 were given
If I have a class... class MyClass: def method(arg): print(arg) ...which I use to create an object... my_object = MyClass() ...on which I call method("foo") like so... >>>
stackoverflow.com
https://programmers.co.kr/learn/questions/1374
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
두번째가 함수에 많은 인자를 쓰지 않았을 경우이다.
두번째에서 에러가 난 경우는 이렇다
import threading
def do_this(what, *args): # 해당 함수는 1개를 인자로 받는데 .. 아래 for 문으로 인해
whoami(what) # 많은 인자가 전달되자 에러가 났었다.
# 그래서 2개 이상의 인자를 받은 수 있는 *args 를 사용했다.
def whoami(what):
print("Thread {0} saya : {1}".format(threading.current_thread(), what))
if __name__=="__main__":
whoami("I'm the main program")
for n in range(4):
p = threading.Thread(target = do_this, args = ("I'm functions {0}".format(n)))
p.start()
do_this( ) 함수의 경우에 what 만으로 1개의 인자만 받을 수 있는 상황인데..
아래 for 문으로 인해 1개 이상의 인자가 들어오는 상황이었다..
그래서 do_this() takes 1 positional argument but 15 were given 가 뜬것인데..
이 코드는 class 함수를 만드는 코드가 아니기 때문에 *args 를 써주어
do_this( ) 함수가 1개 이상의 인자를 받을 수 있도록 설정해주었다.
살짝 엉성하긴 하지만..구현하고자 하는 멀티 스레딩은 구현할 수 있었다..
두번째의 경우에는 하단 링크를 참고하여 해결할 수 있었다.
https://blog.hannal.com/2015/03/keyword-only-arguments_and_annotations_for_python3/
Python 3에서 함수의 키워드 인자 강제와 주석문 · Kay on the rails
Python 3에서 함수의 키워드 인자 강제와 주석문 22 Mar 2015 Python 3에 도입된 함수 선언 문법 중 키워드 인자를 강제하는 방법과 주석문(annotation)이 있다. Python의 매력 요소 중 하나가 깔끔하고 명료한 코드라 생각하는데, 이 두 문법은 기호를 남발하는 코드처럼 보여서 좀 불만스럽지만 코드 문맥(context)을 읽는 데엔 참 유익하다. 그나마 $ 기호가 사용되는 건 아니라서 다행이랄까?! :) 위치 인자 개수 지정 P
blog.hannal.com