개요

파이썬2의 지원기간이 얼마 남지 않은 요즘에 와서는 대부분 파이썬3로 비중이 몰리고 있지만, 아직 파이썬2를 사용하는 곳도 많고 리눅스 등의 기본설치로 제공하는 파이썬의 버전 또한 2버전을 사용하는 경우가 많기 때문에, 이 문제를 해결하고자 두 버전에서 호환이 가능한 파이썬 코드의 작성법을 정리해보았다.

Python3로 진입하면서 print가 state에서 function으로 변경되었다. 기존의 print “” 형식에서 print(“”) 형식으로 변경하고, future 모듈에서 print 함수를 import 하는것으로 해결이 가능하다.

print "hello", "world" # Python3 Error

# =====

print("hello", "world") # Print tuple on python2

# =====

from __future__ import print_function

print("hello", "world") # Works on both version

한글 인코딩 문제

SyntaxError: Non-ASCII character '\xed' in file...

Python3 에서는 관계 없는 이야기이지만, 2 버전에서는 주석, 문자열 같은곳에 한글을 그대로 사용하면 인코딩 에러가 발생한다. 따라서 양쪽 모두에서 한글로 인한 에러가 발생하지 않도록 처리하려면 인코딩 선언을 해주어야 한다.

#-*- coding: utf-8 -*-

추가로 3 으로 넘어오면서 문자열이 기본적으로 유니코드가 되었기 때문에 추가 모듈 로드가 필요하다.

from __future__ import unicode_literals

나누기 연산자 소수점 문제

Python3 에서는 연산자가 하나 추가되어 // 의 경우 Python2의 / 와 같이 동작하고, / 의 경우 소수점을 포함한 값을 반환한다. 이 또한 모듈 import를 통하여 해결이 가능한 부분이다.

from __future__ import division


위의 내용을 조합해서 양쪽에서 모두 잘 돌아가는 파이썬 코드를 작성해보면 다음과 같다.

#-*- coding: utf-8 -*-

from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals


# 한글주석
print("한글 문자열")

# 나누기 (소수점 3자리 까지)
print("%.3f" % (1/3))
[email protected]~$ python2 code.py
한글 문자열
0.333

[email protected]~$ python3 code.py
한글 문자열
0.333

이외의 다른 경우들에 대해서는 써드파티 모듈을 사용하는 방법을 통해 충돌을 최소화 하는 것을 추천하고 있다.


참고자료