파이썬 인덱스 오류

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] 부분에

이미지

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

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을 눌러 프로그램을 끝까지 수행시킵니다.

    • 감사합니다 baja 2018.1.13 18:49
  • 리스트의 인덱스는 1부터가 아니라 0부터 시작입니다.

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

    위와같이 변경하세요.

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

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.