it공부 (개념)

python내가 버그를 공부 하는 방식

cantor 2022. 12. 28. 15:12

요즘 버그를 만날때마다 구글링과 doc읽기에 매진하다보니

내 목적이 프로그래밍을 하는건지 위키를 읽는건지 모르겠다.

 

더딘 진도율에 대한 변명으로  버그대처 방식을 올려본다.

 

 

 

BeautifulSoup 오브젝트를 이용하여 html 데이터파일을 읽어오는 실습을 하던중, UnicodeDecodeError를 만났다.

 

파이썬 버그문서

UnicodeDecodeError는 코드해석중에 유니코드와 관련하여 일어나는오류이며, UnicodeError의 일종이라고한다.

그리고 UnicodeError는 ValueError(값에러) 의 일종이다.

ValueError는 함수나 작업에 부적절한 값을 주었을경우 발생하는 오류이다.

(타입은 적절한데 값이 부적절함)

 

 

요약: 

함수에 잘못된 값이 주어져서 Unicode를 해독하는 과정에 문제가 생겼다

 

 

read에 datafile이 잘못주어진것인지, open에 "website.html"이 잘못주어진것인지 체크해보았다.

 

파일을 여는 과정에서 오류메시지는출력되지 않았다.

 

아마도 read() 가 실행될 때 문제가 되었나보다.

 

내가 알고있는 오류처리 수단은 예외처리뿐이다.

오류가발생한 코드를 무시하고 넘어가는 수단인데, text를 읽어내야 하므로 예외처리를 할 수없다.

 

 

 

python doc를 좀더 살펴보면  open이나 read에서 분명 오류를 처리할 수단이 있을것이다.

 

Errors = None

Error 의입력 항목이 있어서 살펴보았다.

 

눈에띄는값 ignore

일단 encoding오류가 있더라도 무시하고 data에 문제가있더라도 그대로 출력한다.

 

출력된 결과

 

Html 문서에 저장된값을 무사히 출력하는데 성공한것같지만, 3번째줄을 읽어보면 I 씍(한자) 가 보인다.

 

 

그래서 처음의 오류텍스트를 보고 조금더 구글링을 다시 해보았다.

 

 

Unicode, cp949

등은 인터넷에서 사용하는 코드페이지이다.

 

코드 페이지(code page)는 특정한 문자 인코딩 테이블을 위해 쓰이는 전통적인 IBM 용어이다

https://ko.wikipedia.org/wiki/%EC%BD%94%EB%93%9C_%ED%8E%98%EC%9D%B4%EC%A7%80

 

cp949는 마이크로소프트사가 도입한 한국어 코드페이지라고한다.

 

 

그러고보면  open 함수의 항목중에는 encoding 도 있었다.

 

기본인코딩은 platform에 종속적이며,text 인코딩은 파이썬에종속적이다.

 

파이썬 튜토리얼을 읽다보면 파이썬은기본적으로 UTF-8코드를 읽고쓴다고한다.

그리고 이 인코딩을바꾸기 위해선 코드 맨위에

 

# -*- coding: encoding -*-

를 작성하여주는데, encoding항목에 원하는 코드페이지의 이름을 넣어야 한다.

 

 

그래서 내 파일시스템의 인코딩과 내 환경에있는 코드페이지를 각각 체크해보았다. 

 

 

파이썬 파일시스템은utf-8이고, 내지역(locale)에서 선호되는 파일은 cp949라고 한다.

 

아마도 나는 cp949로 부호화된 html파일을 utf-8로 읽어서 문제가 된게 아닐까?

 

 

encoding-"UTF-8"추가

 

 

아무문제없이 출력된실습파일

 

 

 

해결

 

 

이런식으로 공부하다보니까, 진도가 영안나가고 마음이답답하다

누가 버그공부하는법좀 알려줬으면 좋겠다