2010-08-15 1 views
4

나는 경험 많은 프로그래머이지만 파이썬에서는 여전히 약간 녹색이다. 난 그냥 들여 쓰기에 오류가있어서 디버깅 시간이 많이 걸렸다. 나는 경험 많은 파이썬 프로그래머가 처음부터 이러한 문제를 피하기 위해 어떤 일을하는지 궁금해했다.python 공백 구문에 의해 트릭되는 것을 피하기 위해 어떤 트릭을 사용합니까?

class Wizvar(): 

    def select(self): 
     self.selected = True 

    def unselect(self): 
     self.selected = False 

     value = None 

문제는 '값 = 없음'한 단계 outdented되지해야한다는 것입니다 :

여기에 코드 (훨씬 더 큰 프로그램의 일부)입니다. 그럴 때마다 unselect 메서드가 호출 될 때마다 변수가 clobbered됩니다. 나는 무엇이 잘못되었는지 보지 않고 여러 번 쳐다 보았다.

답변

8

위의 모든 클래스 속성 (예 : value)을 class Wizvar 선언 (문서 문자열 아래, 그러나 모든 메소드 정의 위) 아래에 놓습니다. 항상 같은 장소에 클래스 속성을 배치하면이 특정 오류가 자주 발생하지 않을 수 있습니다. 위의 규칙을 따라하는 경우 작성했다고

주의 사항 :

class Wizvar(): 
     value = None 

    def select(self): 
     self.selected = True 

    def unselect(self): 
     self.selected = False 
다음 파이썬은 IndentationError 제기 것이다

:

% test.py 
    File "/home/unutbu/pybin/test.py", line 7 
    def select(self): 
        ^
IndentationError: unindent does not match any outer indentation level 
+0

좋은 조언입니다. 실제로, 그것은 다른 언어로 평소에하는 일입니다. 나는 왜 내가이 경우에 그것을하지 않았는지 전혀 모른다. 하지만 제가 묻는 것은 파이썬에만 한정된 기술입니다. –

+0

@Neil : 불행히도 여기서는 도움이 될 수있는 파이썬 관련 기술은 생각할 수 없으며 일반적인 기술 만 생각할 수 있습니다. 단위 테스트가 언급되었습니다. 나는 디버깅 할 때 print 문을 자유롭게 사용하고 작은 비트로 코드를 작성하는 경향이있다. 이제 당신이 이것에 물렸어, 나는이 잠재적 인 문제에 대한 당신의 인식이 크게 높아질 것이고 아마도 그 자체가 미래의 실수를 막을 것이라고 생각한다. – unutbu

1

일반적으로 : 많은 단위 테스트. 코드 리뷰는 또한 많은 도움이됩니다.

value이 클래스 변수 일 텐데 outdented 될 것으로 예상 되었기 때문에 적절한 단위 테스트는이 경우가 아니라는 것을 발견했을 것이므로이 특정 오류는 쉽게 식별 할 수있는 것처럼 보입니다.

PyDev과 같은 도구는 다른 일반적인 실수를 찾아내는 데 도움이되므로 고려해 볼 수 있습니다.

1

나는 그런 문제가 발생하지 않습니다) 이상을 I 불필요한 것, 실종 된 것 또는 낡은 것보다 덜 자주 버림받습니다.

if (foo) 
    bar(); 
    baz(); 

중괄호를 사용하는 언어로.

즉, 특정 코딩 스타일이 도움이됩니다. 예를 들어 클래스 클래스의 맨 위에 항상 클래스 변수를 나열합니다. 실수로 들여 쓰기가 발생하면 사용하지 않는 지역 변수를 만드는 대신 IndentationError를 얻습니다. 그건 그렇고, 항상 이런 식으로 보았습니다. 일관된 들여 쓰기 (PEP 8을 사용하고 4 칸을 사용)도 도움이됩니다. 일부 사람들은 일부 칸에 하나의 칸을 사용합니다. 간과하기 쉽습니다.

(PyLint와 같은) 정적 코드 분석은 이러한 오류를 지적 할 수 있지만 이러한 것들에 대해서는 많은 경험이 없습니다. 내가 쓴 것처럼, 그것은 단지 대부분의 시간 동안 작동합니다.

+1

파이썬의 중요한 공백은 코더 간의 문체 일관성과 같은 좋은 메타 프로그래밍 실습을 촉진 할뿐만 아니라 문제가되는 것보다 많은 문제를 예방한다는 데 전적으로 동의합니다. –

관련 문제