python3 코드를 개발하다가 자주 실수하는 부분을 적어본다.
1. raw_input은 사라졌다.
raw_input 대신 input 함수로 바꿔 그대로 사용한다.
2. print "" 이 아닌 print("")이다.
print "log : ..."
3. sqlite
python2에서는 sqlite import하고 난 뒤 쿼리를 날리면 buffer()를 사용했었는데, python3에서는 ()만 사용한다.
cur.execute('SELECT count FROM Ages WHERE org = ? ', (org, ))
row = cur.fetchone()
()를 사용하지 않으면, 다음 에러가 발생한다.
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 40 supplied.
두 개의 매개 변수를 쿼리에 전달할 때는 다음처럼 2개의 변수를 ()에 넣어서 전달한다.
cur.execute('''INSERT INTO Ages (id, age) VALUES ( ?, ? )''', (i,a), )
4. urllib api의 모듈 이름
파이썬 2 => 파이썬 3
urllib.urlencode() => urllib.parse.urlencode()
urllib.urlopen() => urllib.request.urlopen()
5. urllib api의 바이너리
python2의 urllib에서는 urlopen의 결과가 기본 문자열이었다면 python3의 urllib.request.urlopen의 결과는 bytes이다.
에러는 TypeError: a bytes-like object is required, not 'str'와 같다.
uh = urllib.request.urlopen(url, context=scontext)
data = uh.read().decode('utf-8')
로그로 찍어보면 아래와 같이 byte로 읽는 것을 확인할 수 있다.
characters b'{\
'python' 카테고리의 다른 글
pyenv 설치 방법 (0) | 2017.09.19 |
---|---|
[python3] sorted 함수 예제 (0) | 2017.07.20 |
[python3] dict()의 in의 의미 (0) | 2017.07.11 |
[python3] 맥에서 spyder 설치/실행 (0) | 2017.04.28 |
[python] python 2.4 -> python 2.7 업그레이드 (0) | 2017.01.16 |