수색…


통사론

  • 패스

비고

왜 당신은 명시 적으로 아무 것도하지 말라고 해석기에게 말하고 싶습니까? 파이썬은 코드 블록 ( if , except , def , class 등의 뒤)을 비울 수 없다는 문법적 요구 사항을 가지고 있습니다.

그러나 때로는 빈 코드 블록이 그 자체로 유용합니다. 빈 class 블록은 catch 될 수있는 예외와 같은 새롭고 다른 클래스를 정의 할 수 있습니다. except 블록은 용서를 구할 필요가 없다면 "나중에 용서를 구하십시오"라는 가장 간단한 표현 일 수 있습니다. 반복자가 모두 무거워지면 반복자를 실행하기위한 빈 for 루프가 유용 할 수 있습니다.

따라서 코드 블록에서 아무 것도 일어나지 않으면 IndentationError 생성되지 않도록 해당 블록에 pass 가 필요합니다. 또한, 모든 문 (단지 용어를 포함한이 같은 평가하는 Ellipsis 문자 ... 사용할 수있는 대부분 문서화 문자열 또는 문자열),하지만 pass 실제로 아무것도 일이되어 있지 않은지 명확하게하고, 필요로하지 않는다 실제로 평가되고 적어도 일시적으로 메모리에 저장됩니다. 다음은 좋은 방법과 나쁜 방법에 대한 의견과 함께 가장 자주 사용되는 pass 의 작은 주석이 달린 컬렉션입니다.

  • 특정 유형의 Exception (all 또는)를 무시합니다 ( xml 예제).

     try:
         self.version = "Expat %d.%d.%d" % expat.version_info
     except AttributeError:
         pass # unknown
    

    참고 : 다음 예제와 같이 pandas 에서와 같이 모든 유형의 레이즈는 무시됩니다. KeyboardInterruptSystemExit (또는 심지어 HardwareIsOnFireError 와 같이 호출자에게 전달되어야하는 예외를 catch하기 때문에 일반적으로 나쁜 습관으로 간주됩니다. 특정 호출 응용 프로그램에서 알기를 원하는 특정 오류가있는 사용자 정의 상자에서 실행되고 있지 않습니까?).

     try:
         os.unlink(filename_larry)
     except:
         pass
    

    적어도 except Error: 또는이 경우에는 except OSError: except Error: 는 적어도 더 나은 방법으로 간주됩니다. 필자가 설치 한 모든 파이썬 모듈에 대한 빠른 분석 결과에 따르면 모든 except ...: pass 10 % 이상이 except ...: pass 문에서 모든 예외를 catch하므로 파이썬 프로그래밍에서 여전히 빈번한 패턴입니다.

  • 새 동작을 추가하지 않는 예외 클래스를 파생 scipy (예 : scipy ).

     class CompileError(Exception):
         pass
    

    마찬가지로 추상 기본 클래스로 의도 된 클래스는 명시 적으로 비어있는 __init__ 또는 하위 클래스가 파생되어야하는 다른 메소드를 가지고 있습니다. (예 : pebl )

     class _BaseSubmittingController(_BaseController):
         def submit(self, tasks): pass
         def retrieve(self, deferred_results): pass
    
  • mpmath 에서 결과를 신경 쓰지 않고 코드가 몇 가지 테스트 값에 대해 올바르게 실행되는지 테스트합니다.

     for x, error in MDNewton(mp, f, (1,-2), verbose=0,
                              norm=lambda x: norm(x, inf)):
         pass
    
  • 클래스 또는 함수 정의에서, 블록의 유일한 것으로 실행될 의무 성명서 로서 문서화 문자열이 이미 준비되어있는 경우가 많습니다. 이러한 경우, 블록을 포함 할 수 있습니다 pass 말을하기 위해 문서화 문자열에 추가를, 예를 들어 "이것은 참으로 아무것도 할 것입니다." pebl :

     class ParsingError(Exception): 
         """Error encountered while parsing an ill-formed datafile."""
         pass
    
  • 필자가 개인적으로 Ellipsis 리터럴을 선호하지만 pass 는 "이 메서드 / 클래스 / if-block / ... 아직 구현되지 않았지만이 작업을 수행 할 장소가 될 것입니다"라는 말의 자리 표시 자로 사용됩니다 ... (참고 : 파이썬-3 전용) 순서로 엄격이 이전 예제에서 의도적 인 "무 조작"을 구별합니다. 예를 들어, 모형을 넓은 획으로 쓴다면

     def update_agent(agent):
         ... 
    

    다른 사람들이 가질 수있는 곳

     def update_agent(agent):
         pass
    

    전에

     def time_step(agents):
         for agent in agents:
             update_agent(agent)
    

    나중에 update_agent 함수를 작성하라는 알림으로서 나머지 코드는 의도 한대로 작동하는지 확인하기 위해 일부 테스트를 이미 실행하십시오. (이 경우에 대한 세 번째 옵션은 raise NotImplementedError 입니다.이 방법은 "이 추상 메서드는 모든 하위 클래스에서 구현되어야 raise NotImplementedError 기본 클래스에서이 추상 메서드를 정의 할 수있는 일반적인 방법이 없습니다" 또는 "이 함수 ,이 이름은 아직이 릴리스에서는 구현되지 않았지만 서명은 다음과 같습니다. " )

예외 무시

try:
    metadata = metadata['properties']
except KeyError:
    pass

잡힐 수있는 새로운 Exception 만들기

class CompileError(Exception):
    pass


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow