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