Python 3.12.3多行输入按Ctrl+D结束时丢失末尾字符求助
问题原因
input() 函数仅在读取到换行符时才会返回完整的一行内容。如果你在输入完字符后直接按 Ctrl+D 而不输入换行符,未完成的那一行内容不会被 input() 捕获,而是直接触发 EOFError,导致末尾的字符丢失。
解决方案
要捕获所有输入内容(包括未以换行符结尾的部分行),可以直接通过 sys.stdin.read() 读取全部输入直到 EOF,它会包含所有输入的字符,无论是否有换行符。之后可以用 splitlines() 将内容拆分为行,保持和原代码一致的结构。
修正后的代码
import sys def main(): all_input = sys.stdin.read() lines = all_input.splitlines() print(lines) if __name__ == "__main__": main()
逐行读取的替代方案
如果处理大输入时不想一次性加载全部内容到内存,可以用 sys.stdin.readline() 逐行读取,它在遇到 EOF 时会返回空字符串,同时能正确处理未以换行符结尾的部分行:
import sys def main(): lines = [] while True: line = sys.stdin.readline() if not line: break lines.append(line.rstrip('\n')) print(lines) if __name__ == "__main__": main()
这两种方案都能正确捕获你输入的全部内容,比如输入 --- 后按 Ctrl+D,会得到 ['---'] 而非 ['--']。
内容的提问来源于stack exchange,提问作者Michal P.
相关产品推荐
相关产品推荐

