Python으로 개발하면서 작성한 메모로, 기본적인이지만 오랜만에 Python을 사용할 때 참고할 만한 내용을 적어봤다. Python 2.7 버전 기준이다.
if문
1 2 3 4 5 6 |
A = 1 if A == 1: print "1은 1이다." else: print "1은 1이 아니다." |
예외처리
1 2 3 4 5 6 7 |
try: db_session.commit() except InvalidRequestError as e: # 여기에서 예외 처리하기 except Exception as e: # 일반적인 예외 처리 raise e |
버전 알아내기
1 2 |
import sys print(sys.version_info) |
SQLAlchemy
SQLAlchemy는 Python에서 인기있는 ORM 모듈이다.
Flask
Flask는 가벼운 Python 웹프로임웍이다. RESTful API를 아주 쉽고 간단하게 만들 수 있다.
API의 예외 처리
Implementing API Exceptions 페이지에 아주 잘 나타나있다.
우선 예외 클래스를 만든다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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에서 예외가 발생했을 때 표시할 페이지의 응답부분을 만든다.
1 2 3 4 5 |
@app.errorhandler(InvalidUsage) def handle_invalid_usage(error): response = jsonify(error.to_dict()) response.status_code = error.status_code return response |
이제 API에서 예외가 발생했을 때, invalidUsage 클래스를 사용해서 예외를 전파하면 된다.
1 2 3 4 5 6 |
@app.route('/foo') def get_foo(): try: return some_action() except Exception as e: raise InvalidUsage('This view is gone', status_code=410) |
Jsonify 에러
1 |
a TypeError: Decimal('0.10') is not JSON serializable error |
Flask의 이와 관련한 이슈에 따르면 simplejson을 설치하면 자동으로 jsonify가 그것을 사용한다고 했다.
PIP
설치
1 2 3 |
# Centos 6.7 yum install -y python-pip pip install --upgrade pip |
사용
1 2 3 4 5 6 7 8 |
# 설치된 python 모듈 모두 보기 pip list # 특정 버전 설치 pip install jsonpatch==1.2 # 특정 모듈 제거 pip uninstall supervisor |
에러
DistributionNotFound
1 2 3 4 5 6 7 8 9 10 |
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를 설치한다.
1 |
sudo pip install --upgrade setuptools |