당신은 멋쟁이, 우리는 장고쟁이~

0%

PEP8 Programming Recommendations - 2편

PEP8 프로그래밍 권장사항들 - 2편



BaseException이 아닌 Exception


BaseException 이 아닌

Exception 에서 예외를 파생 시킵니다.


BaseException에서 직접 상속은 예외를 잡는것이 틀린일인 예외를 위해 있습니다.


예외를 잡아내는 코드가 필요한 곳과, 예외가 발생하는곳을 잘 구분해서. 예외의 상하관계를 디자인 합니다.


“문제가 발생했습니다” 라는 단순한 얘기보다. 프로그래밍적으로 “무엇이 잘못됬지?” 라는 질문을 답하도록 목표합니다.



예외가 오류인 경우 예외 클래스에 접미사 Error를 추가해야 합니다만, 클래스 이름 지정 규칙이 여기에 적용됩니다.




예외연계


파이썬3 에서는 “raise X form Y” 라는 형태의 예외 연계를 적절하게 써줘야 합니다. 이렇게 하면, 본래의 traceback을 잃지 않고, 명시적으로 교체를 해줄수 있습니다.


내부 예외를 교체할때는 (파이썬2 에서는 raise X, 파이썬 3.3부터는 raise X from None), 연관이 있는 세부사항들이 새로운 예외로 전송되어야 합니다. 연관이 있는 세부사항들에 대한 예를 들자면, 속성명이나, 원조 예외의 메시지 등을 예로 들수 있습니다.



raiseValueError('message')


raiseValueError('message') 형태는 옛날 스타일로, 파이썬3에서는 허용되지 않습니다.



예외를 잡아낼때는, bare except:절의 사용을 피합니다



1
2
3
4
try:
import platform_speicific_module
except ImportError:
platform_specific_module = None


bare except: 절은 SystemExit 하고 KeyboardInterrupt 예외를 잡아낼것이고, Ctrl + C 로 방해하기 어렵고, 다른 문제들을 야기시킬수 있습니다.


만약 프로그램 에러 신호를 보내는 모든 예외들을 잡고 싶다면, except Exception:을 사용합니다.


가장 좋은 방법은 bare except:절의 사용을 두가지 경우로 제한하는겁니다.


  1. 예외 처리기가 traceback을 인쇄하거나 기록하는 경우, 사용자는 최소한 오류가 발생했음을 알게 됩니다
  2. 코드가 정리 작업을 수행해야 할때, 예외가 발생하면 예외가 위쪽으로도 영향을 미칠수 있습니다. try, finally 를 쓰는것이 이런것을 다룰때 좋습니다.


잡은 예외를 이름에 묶어두고 싶을때



파이썬2.6 에 추가된 명시적인 이름 묶기 syntax 를 사용합니다


1
2
3
4
5

try:
process_data()
except Exception as exc:
raise DataProcessingFailedError(str(exc))

이것은 파이썬 3에서만 지원됩니다. 오래된 스타일의 콤마가 들어가는 syntax 를 사용해서 혼란스러운 문제들은 피해야 합니다.



마치며..


프로그래밍 권장사항 내용이 길어지네요.

대부분의 경우에는 아직까지 이해가 잘 안가고. 원문을 읽어봐도 이해가 잘 안갑니다 ㅠㅠ


근데 이게, 아직 제가 프로그래밍 레벨이 낮아서 이해가 안가는거 같습니다.

나중엔 좀 더 이해가 빠르겟죠? ㅎ