반응형
해당 에러는 파이썬에서 나타나는 전달된 인자 갯수와 관련된 에러타입이다
함수는 위치 인자를 1개 취하는데, 이 개수보다 많은 인자가 위치 인자로 전달되었거나,
특정하게 지정되지 않은 인자가 전달되지 않았을 때 나타나는 에러이다.
이 상황은 주로 2가지 상황에서 나타나는 것 같은데..
첫번째는 class 함수에 self 가 들어가지 않았을 때
위 첫번재 에러의 경우에는 아직 코드로 구현을 하지 않아서 . 나중에 참고하기 위해
링크를 남겨둔다
https://programmers.co.kr/learn/questions/1374
두번째가 함수에 많은 인자를 쓰지 않았을 경우이다.
두번째에서 에러가 난 경우는 이렇다
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/
반응형