해결된 질문
작성
·
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 파일에 잘 입력되기는 합니다.
Run python file in Terminal을 하면, Terminal에는 아무것도 print되지 않고 test.txt에만 내용이 추가됩니다.
그런데 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나 코드 실행 방식에 따라 동작이 다를 수 있으니 참고해주시면 좋겠습니다.