Python 개발 노트
Apr 1, 2017
Python으로 개발하면서 작성한 메모이다. 기본적이지만 오랜만에 Python을 사용할 때 참고할 만한 내용을 적었다. Python 2.7 버전 기준이다.
if문
A = 1
if A == 1:
    print "1은 1이다."
else:
    print "1은 1이 아니다."
예외처리
try:
    db_session.commit()
except InvalidRequestError as e:
    # 여기에서 예외 처리하기
except Exception as e:
    # 일반적인 예외 처리
    raise e
버전 알아내기
import sys
print(sys.version_info)
SQLAlchemy
SQLAlchemy는 Python에서 인기 있는 ORM 모듈이다.
Flask
Flask는 가벼운 Python 웹프레임웍이다. RESTful API를 아주 쉽고 간단하게 만들 수 있다.
API의 예외 처리
Implementing API Exceptions 페이지에 아주 잘 나타나 있다.
우선 예외 클래스를 만든다.
from flask import jsonify
class InvalidUsage(Exception):
    status_code = 400
    def __init__(self, message, status_code=None, payload=None):
        Exception.__init__(self)
        self.message = message
        if status_code is not None:
            self.status_code = status_code
        self.payload = payload
    def to_dict(self):
        rv = dict(self.payload or ())
        rv['message'] = self.message
        return rv
어떤 API에서 예외가 발생했을 때 표시할 페이지의 응답 부분을 만든다.
@app.errorhandler(InvalidUsage)
def handle_invalid_usage(error):
    response = jsonify(error.to_dict())
    response.status_code = error.status_code
    return response
이제 API에서 예외가 발생했을 때, invalidUsage 클래스를 사용해서 예외를 전파하면 된다.
@app.route('/foo')
def get_foo():
    try:
        return some_action()
    except Exception as e:
        raise InvalidUsage('This view is gone', status_code=410)
Jsonify 에러
a TypeError: Decimal('0.10') is not JSON serializable error
관련 Flask 이슈에서 simplejson을 설치하면 자동으로 jsonify가 그것을 사용한다고 했다.
PIP
설치
# Centos 6.7
yum install -y python-pip
pip install --upgrade pip
사용
# 설치된 python 모듈 모두 보기
pip list
# 특정 버전 설치
pip install jsonpatch==1.2
# 특정 모듈 제거
pip uninstall supervisor
에러
DistributionNotFound
Traceback (most recent call last):
  File "/usr/bin/echo_supervisord_conf", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 2655, in <module>
    working_set.require(__requires__)
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: meld3>=0.6.5
setuptools를 설치한다.
sudo pip install --upgrade setuptools