[문제] 문자열 s = 'python'에 대해서 s[-100], s[100], s[-100:100] 문들을 수행해 보고 수행되지 않는 경우에는 어떤 에러 메시지를 내는지 관찰하라.


먼저 인덱싱 문인 s[-100]과 s[100] 을 수행해 보면 아래와 같이 인덱스 범위를 넘었다는 에러가 발생합니다.

s = 'python'
print s[-100]

[결과]

Traceback (most recent call last):
  File "D:\PrjRoot\python\test\P110-07.py", line 2, in <module>
    print s[-100]
IndexError: string index out of range

s = 'python'
print s[100]

[결과]

Traceback (most recent call last):
  File "D:\PrjRoot\python\test\P110-07.py", line 2, in <module>
    print s[100]
IndexError: string index out of range


당연한 결과지요.

그럼 슬라이싱 문인 s[-100:100] 을 한번 수행해볼까요.

s = 'python'
print s[-100:100]

[결과]

python


어라, 오프셋 범위를 넘어섰는데도 python 이란 문자열을 반환하네요. 어떻게 된 걸까요?

이는 파이썬 인터프리터가 슬라이싱의 경우 오프셋 범위를 넘어서면, 범위 내의 값으로 자동 처리하여 그 결과를 반환하기
때문입니다.
 
사실 이런 경우에는 인터프리터 차원에서 그냥 에러를 발생시키고, 필요시 try ~ except 문을 사용해서 예외를 잡게하는 편이 더 낳지 않나는 생각이 드네요.
 
인덱싱은 범위를 넘어서면 안되고 슬라이싱은 괜찮고 하니 헷갈리기도 하구요.

유연성을 고려해서 이러한 문법이 생겨났을거라 짐작되지만, 서로 비슷한 문법에 대해서는 어느 정도 일관된 구조를 가지는
것이 언어를 직접 사용하는 개발자에게 유리하지 않을까요.


Python, 인덱싱, 슬라이싱, 열혈강의 연습문제, 열혈강의 Python, 열혈강의 파이썬, 파이썬

저작자 표시 비영리 변경 금지
Posted by 야노