현재 실행하는 클래스의 이름과 메소드 이름, 라인 넘버를 얻어보자. 클래스의 인스턴스에서 호출한다는 가정하에, def trace(obj, toList = False): import sys className = obj.__class__.__name__ methodName = callersname() lineNumber = sys.exc_info()[2].tb_lineno if toList: return className, methodName, lineNumber else: return "%s.%s[%d]" % (className, methodName, lineNumber) 단, callersname()은 def callersname(): return sys._getframe(2).f_code.co_name..
# 현재 함수의 이름 얻기 def whoami(): import sys return sys._getframe(1).f_code.co_name # 현재 함수의 caller 이름 얻기 def callersname(): import sys return sys._getframe(2).f_code.co_name 출처 : Python Recipe 66062: Determining Current Function Name
ElementTree와 같은 패키지를 사용하여 XML를 파싱하는 경우, XML 엘리먼트의 짝이 안맞는 등, 유효하지 않은 XML 구성이 탐지되면 ExpatError가 뜨는데, try: # XML 연산 catch ExpatError, e: # do something 하면, NameError: global name 'ExpatError' is not defined라는 에러가 뜬다. 이를 해결하려면, ExpatError를 catch하는 py 파일의 앞에, scope을 맞춰서 from xml.parsers.expat import ExpatError 라고 넣어주자. 그러면, 문제 해결!! '' While you are using XML packages such as ElementTree, you might wan..
ㅁ Queue.Queue 1. push('a') : 6.39s 2. push('a') + pop() : 11.37s ㅁ collections.dequeue 1. append('a') : 0.13s 2. append('a') + popleft() : 0.27s ㅁ list 1. append('a') : 0.15s 2. append('a') + pop() : 0.40s Queue를 쓰려면, dequeue를 활용하는 것이 좋을 것 같다.
여러가지 단위 테스트 프로그램이 존재하나, 그 중, standard library로 포함되어 있는 pyUnit (unittest) 과 py.test를 비교하여 간략하게 비교한다. ㅁ 테스트를 위한 클래스 class A: def getA(self): return 'a' def getWrongA(self): return 'b' if __name__ == '__main__': aa = A() print aa.getA() * 위의 코드에서 보는 바와 같이, 테스트 메소드는 두 개(getA와 getWrongA)이다. * 각 메소드는 정상 상황('a'를 리턴할 것이라 예상하는 상황에서 실제로 'a'를 리턴)과 오류 상황('a'를 리턴할 것이라 예상하는 상황에서 실제로는 'a'가 아닌 다른 값을 리턴)을 나타낸다. ..
1. 현재 클래스의 메소드 이름 얻기 class Base 에 대해, Base.__dict__ 라고 하면, Base에 선언된 정보를 얻을 수 있으나, 이중, 메소드 이름만 추출하고 싶다면, from types import * def getMethodNames(): result = [] for attr, val in Base.__dict__.items(): if type(val) == FunctionType: result.append(attr) return result 과 같이 함으로써, method 이름을 추출할 수 있다. 2. 그러나, 이미 특정 class로부터 instance를 만든 경우에는 위의 방법을 그대로 사용할 수 없다. 즉, Base.getMethodNames()라고 하면 결과를 얻을 수 있지..
This is too good to be true.
베블런 효과 "상층계급의 두드러진 소비는 사회적 지위를 과시하기 위하여 자각없이 행해진다."고 Thorstein B. Veblen이라는 사람이 이라는 저서를 통해 소개한 개념이다. 가격이 오르는데도 일부 계층의 과시욕이나 허영심 등으로 인해 수요가 줄어들지 않는 현상을 일컫는다. BusinessDictionary.com에 인용된, Veblen effect의 정의를 소개하자면, Abnormal market behavior where consumers purchas the higher-priced goods whereas similar low-priced (but not identical) substitutes are available. It is caused either by the belief that ..
예전에는 A를 선택함으로써 포기하게 되는 B의 비용이라고만 막연히 알고 있었다. 짜장을 선택했기 때문에 포기해야하는 짬뽕의 가치랄까. 두 개의 선택 중, 하나를 택하는 상황만 생각해 봤는데, 여러 개의 경우는 포기한 가치 중 가장 큰 가치를 뜻하는 것이라는 걸 알게 되었다. 기회비용의 정의가, '여러 선택방안 중에서 한 개를 선택했을 때 포기한 대안 가운데 가장 좋은 한 가지의 가치' 라고 한다. 주어진 10만원에 대해, A - 7만원짜리 옷을 산다. B - 8만원짜리 MP3를 산다. C - 9만원짜리 신발을 산다. 사고 싶은 것을 사는 걸 좋은 가치라고 생각한다면, B를 택했을 때의 기회비용은 9만원이 되는 것 같은데.. 돈 절약 관점에서는 돈을 덜 쓰는게 더 좋은 가치가 되는 건 아닐까? 그럼, 7만..
손이 tight 하다 = 바쁘다~
잘 쓰던 가방인데, 지퍼 부분이 부러져버렸다. A/S 해서 써야지. 필름나라에 문의했더니, 수선하는 곳을 별도로 알려준다. 세기 P&C --------- homesite : www.saeki.co.kr 주소 : 서울시 중구 충무로 3가 24-9 세기빌딩 3층, 세기 P&C, 고객지원팀 앞 A/S 내용 기록할 것 대한통운 택배로 부칠 것 (착불)
1. 10.0.0.1에 접속 2. cat /proc/drbd -> primary인지 secondary인지 정보가 출력됨 3. drbdadm primary mysql -> primary로 전환 4. mount /dev/drbd0 /drbd/ 5. service mysql start