1. 국내주식/1-4. 오류 해결

(파이썬) TypeError: missing 1 required positional argument: 'self'

봄이오네 2022. 10. 18. 08:20
반응형
목차
1. 들어가며
2. 코드 내용
3-1. 사례별 분석(1차) - 개별 사례 설명
3-2. 사례별 분석(2차) - print문으로 찍어보기
4. 마치며

1. 들어가며

파이썬으로 코딩을 하다보면 자주 접하게 되는 오류
TypeError: aaa() missing 1 required positional argument: 'self' 이다.
→ aaa()로 되어 있는 괄호에 1개의 인자가 필요하다는 뜻이다.

동 내용이 필요한 이유는,
주식 자동 매매를 하기 위해서는, 클래스 내 1번 함수를 실행하고,
1번 함수에 2번 함수를 실행하게 해두었는데, 위와 같은 오류가 발생한다.
→ 즉, 1번·2번 함수가 각각 실행되어 있고,
1번 함수를 실행하면, 그 후속으로 2번 함수 실행 코드를 작성하다가 나온 오류

2. 코드 내용

  • 4가지 사례 분석을 통해, 오류의 해결 방법을 검토해 본다.
  • <코드1> 은 클래스 A안에 있는 bbb함수를 실행하면, aaa함수가 실행되는 내용이다.(아래는 실행하면 오류가 난다)
class A():
    def aaa(self):
        print("함수 aaa 실행 후 종료")

    def bbb(self):
        A.aaa()
        print("함수 bbb 실행 후 종료")

A.bbb()

< 코드1. 클래스에 2개 함수가 선언된 형태인 사례 >

3-1. 사례별 분석(1차) - 개별사례 분석

1) 9번줄 인수에 아무것도 넣지 않고 실행 → 오류 발생 (9번줄 1개 인수가 필요)

&lt; 그림2-1. 코드1을 실행해 보면, 9번줄에서 에러가 난다 &gt;



2) 9번줄 인수에 self를 넣어준 경우 → 오류 발생

  • 아래 <그림1>의 9번째 줄의 인수로 self를 넣어주는 경우, self가 정의되지 않았다며 오류 발생
&lt; 그림2-2. 9번째 함수에 self 인수를 넣어준 경우 (오류 발생) &gt;


3) 9번줄 인수에 임의의 숫자 "1"을 넣어준 경우 → 오류 발생 (6번줄)

  • 9번줄에 임의의 숫자"1"을 넣어주니, 오류가 발생하지 않는다.
  • 다만, 6번줄에서 에러가 났다. 오류 메시지도 aaa() missing 1 required position argument:self 이다.
&lt; 그림2-3. 9번줄에는 임의의 숫자 "1", 6번줄의 A.aaa()함수에는 어떤 인수도 넣지 않았음 &gt;


4) 9번줄에 임의의 숫자 "1", 6번 줄에 임의의 숫자 "2"를 입력 → 정상 작동

  • 아래 <그림2-4>의 파이참 실행화면에서 확인하였듯이 정상적으로 출력한다.
&lt; 그림2-4. 9번줄과 6번줄에 인수를 각각 넣으니, 출력된다 &gt;

3-2. 사례별 분석 (2차) - print문으로 찍어보기

  • 위 사례에 대해 각각 print문을 찍어보면, 어디에서 오류가 나는지 확실히 알 수 있다

1) 어떤 인수도 집어넣지 않는 경우

  • 14번 줄에 어떤 인수도 넣어주지 않는 경우 → 14번 줄에서 바로 에러가 난다.
&lt; 그림3-1. 인수가 입력하지 않으면, 오류 발생 &gt;


2) 인수 1개를 넣어주어서 함수 실행

  • 14번줄에 숫자 "1"을 넣어주고 실행하면, 7번줄 함수를 실행하되, 9번줄에서 에러 발생
  • 9번줄에서 인수가 필요하다는 의미이다.
&lt; 그림3-2. 14번줄에 인수 1개만 집어넣어도 오류 발생 &gt;



3) 인수 2개를 다 넣어주는 경우

  • 14번줄에 1, 9번줄에 2를 입력하니, 정상 출력된다.
  • 이 경우, 파이참의 출력창에 print문이 어떻게 출력되는지 파악하게 되면, 클래스 동작이 눈에 들어온다.
&lt; 그림3-3. 14번, 9번 줄에 각각 인수를 넣으니, 정상 출력 &gt;


4. 마치며
TypeError: missing 1 required positional argument: 'self'

위 에러가 나오면, 인수를 집어넣어야 하는 곳에
self로 들어가 있거나, 빈칸으로 되어 있는지 파악이 우선이다.

코딩을 하다가 해답이 없을 때는 print문을 찍어보고,
막히는 곳에서 해결 방법을 찾아가는 편이다.

오류가 나올 때마다, 좌절하기 보다는 하나둘씩 해결해 나가는 즐거움을 느껴보도록 하자 ^^

반응형