Python/Error

[Python 2.x] SyntaxError: Non-ASCII character '\xeb' in file ~, but no encoding declared

ahfmrjttb 2020. 9. 9. 04:50

실행명령어를 보면 Pyspark를 실행하고 있는 것을 확인할 수 있는데 에러를 보면 Python 파일에서 에러가 발생했다고 나와있어 Python 에러라고 보면 된다. 아마 필자도 그렇고 독자들도 그렇고 순수 Python 파일을 실행하다가 저런 에러가 발생할 수 있을 것이다. 여튼 에러를 보면

 

'SyntaxError: Non-ASCII character '\xeb' in file /home/hduser/TensorFlowOnSpark/FD_lstm_data_setup_2012_2018_hdfs.py on line 62, but no encoding declared' 라고 나와있다. 이를 직역해보면,

 

ASCII 문자가 아닌 '\xeb' 문자가 /home/hduser/TensorFlowOnSpark의 FD_lstm_data_setup_2012_2018_hdfs.py 파일의 62번째 줄에 있고, 선언된 인코딩이 없다, 즉, 이 문자를 지원하는 인코딩이 없어서 에러가 발생했다는 뜻이다.

 

직역을 이해하기 전에 사전 지식을 잠깐 언급하자면 '\xeb' 문자는 utf-8 한글 문자 중 하나이고, 기본적으로 Python 2.x에서는 기본 인코딩이 ASCII이다. (실제로 필자는 Pyspark 실행 시 Python 2.x를 사용하게끔 설정)

 

즉, Python 2.x를 사용 시 ASCII로 표현할 수 있는 영어 알파벳 문자 같은 것은 되지만 한글이나 다른 언어의 문자같이 ASCII로 표현할 수 없는 문자들은 필자의 경우처럼 에러가 발생한다.

 

그래서, 좀 더 알기 쉽게 정리해보면, /home/hduser/TensorFlowOnSpark의 FD_lstm_data_setup_2012_2018_hdfs.py의 62번째 줄에 한글이 있는데 한글을 지원하는 인코딩이 없어(=인코딩하지 못해) 에러가 발생했다는 뜻이다.

 

P.S : 위의 캡쳐화면이 작아서 메시지가 잘 안 보이실텐데 브라우저 확대해서 보시면 보입니다!

 

 

실제로 vim으로 열어서 확인해보면

 

62번째 줄에 'X, Y 데이터 분류 완료!' 라는 내용의 한글이 있다. 이렇게 Python 코드 내에 있는 한글을 Python이 읽어들이지 못해서 에러가 발생한 것이다. 이에 대한 해결법은 간단하다. 파이썬 코드 맨 위에 한글 인코딩을 하도록 명령해주면 된다.

 

 

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

 

# 때문에 주석처리되어 파란색이라 잘 안 보이는데 이렇게 # -*- coding: utf-8 -*- 을 써주면 끝이다. 주의할 점은 #을 빼면 안 되고, utf를 대문자로 쓰면 안 되며, 이 명령어는 반드시 1번째 또는 2번째 줄에 있어야 한다는 점이다. 필자는 무조건 1번째에 위치시킨다.

 

P.S : utf-8 이 아닌, euc-kr을 원한다면 # -*- coding: euc-kr -*- 를 써주면 된다.

 

그러고 나서, 다시 Python 파일을 실행시켜보면

 

해당 에러가 발생하지 않고 잘 동작하는 것을 확인할 수 있다.

 

참고로 Python 3.x 버전에서는 기본적으로 utf-8 인코딩을 사용해서 이 에러가 발생하지 않는다. 만약 Python 3.x 를 사용하고 있는데 이 에러가 발생했다면, Python 파일의 1번째 줄에 #!/usr/bin/env python이 있는지 보고 이게 Python 2.x 버전을 가리키고 있는게 아닌지 확인해봐야 한다. (즉, Python 실행환경이 Python 2.x 버전을 가리키고 있는게 아닌지 확인)

 

Python 2.x 버전은 아까 위에서도 언급했지만 기본적으로 ASCII 인코딩을 사용하고 있어 별도의 인코딩 선언이 없다면 이와 같은 인코딩 에러가 발생한다.

 

 

P.S : 파란색 네모를 보면 cuda 관련 경고(WARN)가 있는데, 정확히는 NVIDIA GPU의 TensorRT 라이브러리에 관련된 경고메시지이다. 이는 Python 파일과 아무런 관련이 없고 실행하는데에도 아무런 문제가 없다. (빨간색 네모)

물론 Tensorflow 관련 포스팅이었으면 저런 경고들도 잡아야하지만 이 포스팅은 Python 관련해서만 얘기하는 포스팅이기 때문에 여기서는 다루지 않겠다.

 

 

 

참고 사이트 : 

    - pante.blog/371

    - dev.plusblog.co.kr/3