Python两数求和代码遇IndexError问题求助(Windows环境)
问题:Spyder中运行Python两数求和代码报
IndexError: list index out of range错误 我编写了一段实现两数求和的Python代码,但在Spyder(Windows系统)中运行时,a = int(tokens[0])处始终报IndexError: list index out of range错误。
import sys input_ = sys.stdin.read() tokens = input_.split() a = int(tokens[0]) b = int(tokens[1]) print(a+b)
下方另一段代码可正常运行:
def sum_of_two_digits(first_digit, second_digit): return first_digit + second_digit if __name__ == '__main__': a, b = map(int, input().split()) print(sum_of_two_digits(a, b))
我看到有人在Linux环境中运行第一段代码是正常的,想请教该问题的原因。
原因分析
核心差异在于不同环境下sys.stdin.read()的输入处理逻辑:
- 在Linux终端中,用户输入两个数后,通过
Ctrl+D发送EOF(文件结束符),sys.stdin.read()会读取所有输入内容,分割后得到包含两个数字的tokens列表,自然能正常访问索引0和1。 - 但在Windows的Spyder交互环境中,直接运行脚本时,
sys.stdin.read()会一直等待EOF,但Spyder控制台默认不会自动触发这个信号。如果用户没有手动输入内容并触发EOF(Windows下需按Ctrl+Z再回车),input_会是空字符串,tokens就成了空列表,访问tokens[0]必然触发索引越界错误。
而第二段代码使用input().split()能正常运行,是因为input()只读取一行输入,Spyder控制台会等待用户输入一行内容后按回车,此时能获取到有效输入并分割为两个数字的tokens,不会出现空列表的情况。
内容的提问来源于stack exchange,提问作者Sinong Ou
相关产品推荐
相关产品推荐

