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
Posted by '김용환'
,