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
See Also