파이썬 인덱스 오류


import sys
class Calc :
    def __init__(self,a,b):
        self.a = a
        self.b = b
    def sum(self):
        return (self.a + self.b)
    def sub(self):
        return (self.a - self.b)
a = sys.argv[1:3]
a1 = a[1]
a2 = a[2]
calc = Calc(a1,a2)
q = int(input("연산자를 고르시오\n1. 덧셈 2. 뺄셈 : "))
if q is 1 :
    print(calc.sum())
elif q is 2 :
    print(calc.sub())
else :
    print("Error")

에서

a = sys.argv[1:3]
a1 = a[1]
a2 = a[2]
calc = Calc(a1,a2)

a2 = a[2] 부분에

이미지

이런 오류가 났습니다. 제대로 된 부분 같은데 왜 이런지 이해가 안가요

  • 2018년 01월 12일에 작성됨

조회수 91


Banner bitmango

2 답변


좋아요
0
싫어요
채택취소하기

간단하게 디버깅하는 방법을 알려드립니다.

a = sys.argv[1:3]
import pdb; pdb.set_trace()    # 추가
a1 = a[1]
a2 = a[2]
calc = Calc(a1,a2)

위와 같이 수행하고 인자값을 넣고 엔터치면 디버거가 수행되면서 a1 = a[1] 에서 브레이크 포인트가 설정되어 멈추는 상황이 됩니다.

(pdb) p a

위와 같이 하면 a1 = a[1] 에 멈춰진 상태에서 a 변수값을 볼 수 있습니다.

a의 변수값이 올바르게 들어있는지 확인을 합니다.

그후 n은 한줄씩 실행 c는 계속실행이므로 c을 눌러 프로그램을 끝까지 수행시킵니다.

  • 2018년 01월 13일에 작성됨

  • 감사합니다    baja   2018.1.13 18:49     

리스트의 인덱스는 1부터가 아니라 0부터 시작입니다.

a1 = a[0]    #a1 = a[1]
a2 = a[1]    #a2 = a[2]

위와같이 변경하세요.

  • 2018년 01월 12일에 작성됨

  • 하지만 sys.argv로 입력 받으면 0에는 파일 이름이 들어가고 1부터 인자값이 들어가더군요     baja   2018.1.12 21:02     
  • 실행시 입력값을 어떻해 입력하셨는지요? 오류의 원인은 간단합니다. 저장되어 있는 리스트는 1개인데 있지도 않는 두번째 리스트를 요청해서 발생하는 겁니다.     정영훈   2018.1.13 18:38     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close