파이썬 프로그래밍을 하다보니 STDERR에 관한 내용이 계속 나오길래 STDERR에 대한 내용 정리와 Python 2.7과 3에서 어떻게 다른지 확인을 해보고 이렇게 정리한다.

표준 에러(STDERR)는 에러 발생시 콘솔에 에러 메시지를 띄울 때 사용하는 방법이다. 이 방법을 이용하면 빨간줄로 어디가 어떻게 틀렸다는 내용은 안 나오고 내가 지정한 문구가 출력되게 된다.




# 여기서는 스프레드시트에 저장할 수 있는 열의 수 = hard limit을 65536으로 설정한다. 최대 65536행까지 사용한다는 뜻.

if row > 65535:

    print('Hit limit of # of rows in one sheet (65535)', file=sys.stderr)





위의 코드에서 스프레드시트에 저장할 수 있는 열의 수를 넘어가면 콘솔창에 빨간 글씨들이 좍좍 출력이 될텐데  file = sys.stderr 를 설정하게 되면 오류 발생시 
          Hit limit of # of rows in one sheet (65535)
문구가 출력되는 형식이다.


그럼 Python 2.7과 3에서 STDERR를 어떻게 표현하는지 보자.


============================ Python ============================

import sys


#1.    Python 2.7에서만 가능

print >> sys.stderr, 'spam'  


#2.    Python 2.7, 3 둘 다 가능

sys.stderr.write('spam\n')  


#3.    Python 3에서만 가능

from __future__ import print_function

def warning(*objs):

    print("WARNING: ", *objs, file=sys.stderr)

============================ Python ============================



만약 파이썬 버전을 고민하지 않고 쓴다면 2번이 가장 좋아보인다.

가장 직관적이고 오해를 할 부분이 없기 때문이다.

물론 3번의 print(*, file = sys.stderr)도 직관적이므로 좋다고 생각한다. 하지만 print() 형태가 2.7에서는 쓸 수 없으므로 주의가 필요하겠다.





ref.
#ashcode / stderr 출력에 대해서 질문드립니다.
https://hashcode.co.kr/questions/183/stderr-%EC%B6%9C%EB%A0%A5%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%A7%88%EB%AC%B8%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4

+ Recent posts