Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

PEP 666 – 어리석은 들여쓰기 거부

Author:
Laura Creighton <lac at strakt.com>
Status:
Rejected
Type:
Standards Track
Created:
03-Dec-2001
Python-Version:
2.2
Post-History:
05-Dec-2001

Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

초록

탭과 공백을 섞어 쓰는 것이 나쁜 생각이라는 데에는 모두가 동의합니다. 어떤 사람들은 이것만으로는 부족하다고 생각합니다. 저는 사람들이 원하는 대로 Python의 동작을 정의할 수 있게 하여, 그들이 좋아하는 방식으로만 실행되고 싫어하는 방식으로는 실행되지 않도록 할 것을 제안합니다. 이는 명령줄 스위치로 구현할 것입니다. 프로그래머가 원하는 방식으로 형식이 맞춰지지 않은 프로그램은 IndentationError를 발생시킵니다.

  • python -TNone은 탭이 하나라도 있으면 실행을 거부합니다.
  • python -Tn은 탭이 정확히 n 칸의 공백이 아니면 실행을 거부합니다
  • python -TOnly는 블록이 탭 이외의 것으로 들여쓰기되어 있으면 실행을 거부합니다

탭과 공백을 섞어 쓰는 사람들은 당연히 자신의 프로그램이 실행되지 않는다는 것을 알게 될 것입니다. 안타깝게도 가축 몰이용 전기 막대처럼 원격으로 그들에게 전기 충격을 주는 방법은 아직 찾지 못했습니다. (하지만 누군가 그 방법을 찾아낸다면 기꺼이 이 옵션을 PEP에 추가하겠습니다.)

근거

Python-list@python.org(일명 comp.lang.python)는 주기적으로 탭과 공백에 관한 논쟁으로 넘쳐납니다. Python에서 들여쓰기가 문법적으로 의미를 가진다는 점을 생각하면 이는 피할 수 없는 일입니다. 이런 논쟁은 지금까지 아무것도 해결하지 못했으며, 여러 사람을 좌절하고 화나게 만들 뿐입니다. 결국 그들은 서로에게 무례한 말을 하기 시작하는데, 이는 우리 모두에게 슬픈 일입니다. 또한 그들이 Python으로 무언가를 만드는 데 쓸 수 있었을 소중한 시간을 낭비하고 있다는 것도 슬픈 일입니다. 게다가 Python 커뮤니티 전체로 보아도, 대외 이미지 관점에서 이는 상당히 불행한 일입니다. 탭과 공백에 대해 글을 올리지 않는 사람들은 (당연하게도) 눈에 띄지 않는 반면, 글을 올리는 사람들은 나머지 우리까지 다소 어리석어 보이게 만듭니다.

문제는 ‘당신의 소중한 시간과 제 시간을 그만 낭비하십시오.’라고 정중하게 말할 방법이 없다는 것입니다. 이미 설전 한가운데에 있는 사람들은 당신이 그들을 측은히 여겨서 그런 말을 한다고 순순히 믿을 상태가 아니며, 자신의 시간은 자기 마음대로 쓸 수 있는 것이라고 지극히 정당하게 주장합니다. 그들은 이 지긋지긋한 논쟁 인자 속에 당밀에 빠진 파리처럼 갇혀 있으며, 빠져나올 수 없다는 것은 자명합니다. 그럴 수 있었다면 이미 그렇게 했을 것이기 때문입니다.

그런데 오늘 저는 ‘n’ 키가 끈적거려서 키보드를 청소하는 데 시간을 써야 했습니다. 그래서 저는 이 사람들을 측은히 여기는 한편으로, 꽤 짜증이 나 있습니다. 제가 이 PEP를 만들면, Guido에게 이를 신속히 거부해 달라고 요청할 수 있을 것이고, 그러면 다음에 이 논쟁(인자)이 다시 시작될 때 ‘Guido는 탭을 싫어하는 사람들이나 탭만 쓰는 사람들의 입맛에 맞추어 무언가를 바꾸지 않을 것이므로, 이 대화는 시간 낭비입니다.’라고 말할 수 있을 것이라고 생각합니다. 그러면 모두가 조용히 a) 자신이 옳고 b) 다른 사람들은 바보이며 c) 멍청이들과 연구실을 함께 쓰지 않아도 되니 틀림없이 운이 좋다고 믿을 수 있을 것입니다(이는 논쟁하는 사람들이 _지금_ 당장이라도 할 수 있는 일이지만, 분명 잊어버린 듯합니다).

그리고 python-list는 신규 사용자에게 너무 적대적인지를 걱정하는 대신, 너무 잘난 척하는 것은 아닌지를 걱정하던 예전으로 돌아갈 수 있을 것입니다. 어쩌면 누군가 2.2의 비클래식 클래스에서 __getattr__와 __getattribute__의 차이가 무엇인지 저에게 설명해 줄 수도 있을 것입니다. 이는 제가 어리석게도 현재 진행 중인 탭 스레드 한가운데에 올린 질문입니다. 저는 그 질문의 답을 알고 싶습니다 [1].

이 제안이 채택된다면 아마 누군가에게 엄청나게 많은 작업이 생길 것입니다. 하지만 저는 이 제안이 채택되기를 원하지 않으므로 상관하지 않습니다.

참고 문헌