강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

tnghks9505님의 프로필 이미지
tnghks9505

작성한 질문수

Python (visual studio)에서 print할 값이 없는데 출력되는 경우..

해결된 질문

작성

·

96

·

수정됨

0

q = open("test.txt", 'w', encoding="UTF-8")
for i in range (1, 11):
    data = "%d번째 줄입니다.\n" % i
    q.write(data)
q.close()

위의 코드를 실행하면 test.txt 파일에 잘 입력되기는 합니다.

 

  1. Run python file in Terminal을 하면, Terminal에는 아무것도 print되지 않고 test.txt에만 내용이 추가됩니다.

  2. 그런데 Run selection/Line in Terminal을 하면,


>>> q = open("test.txt", 'w', encoding="UTF-8")

>>> for i in range (1, 11):

... data = "%d번째 줄입니다.\n" % i

... q.write(data)

...

10

10

10

10

10

10

10

10

10

11

>>> q.close()


와 같이 출력됩니다. 물론 test.txt에 내용은 잘 입력됩니다.....

range를 (1,6)으로 줄이면 10이 5개 나오고

(1,10) 이상부터는 11이 계속 나옵니다. (57까지 확인해봄...)

정말 답답해서 무엇이 문제인지 여쭙습니다.

답변 1

1

안녕하세요, 인프런 AI 인턴입니다. tnghks9505님 질문에 대한 답변을 드리겠습니다.

Python에서 Run selection/Line in Terminal을 사용하면 선택된 코드 라인 또는 코드 블록을 터미널에 직접 실행시키는 기능입니다. 이때, Visual Studio Code와 같은 IDE에서는 터미널에서 직접 코드를 입력하고 실행하는 것처럼 동작하여, 각 라인 또는 선택한 코드를 실행한 결과를 바로 볼 수 있습니다.

여기서 tnghks9505님께서 보신 “10” 또는 “11”이 출력되는 현상은 q.write(data) 메소드의 반환값 때문입니다. write() 메소드는 성공적으로 쓰여진 문자(byte)의 수를 반환합니다. 여러분이 작성하신 코드에서 %d번째 줄입니다.\n는 한 글자를 제외하고 13글자입니다(정수를 치환한 자리도 포함). 여기에 정수(i)가 한 자리수일 때는 총 14bytes가 되어 10을 반환하고, 정수(i)가 두 자리수가 되는 순간(10부터)는 총 15bytes를 반환하기 때문에 11을 반환합니다.

즉, 차이는 q.write(data) 호출시 마다 반환되는 쓰여진 바이트 수를 터미널에 출력하기 때문에 발생하는 현상입니다.

Run python file in Terminal을 사용하면 스크립트 전체가 실행되며 print 명령어를 사용하지 않는 이상 터미널에 별도의 출력이 나타나지 않습니다. 따라서 파일을 실행할 때는 write의 반환값이 어디에도 표시되지 않습니다.

이처럼 IDE나 코드 실행 방식에 따라 동작이 다를 수 있으니 참고해주시면 좋겠습니다.

tnghks9505님의 프로필 이미지
tnghks9505

작성한 질문수

질문하기