Collections.deque() EOFError: EOF when reading a line

Collections.deque() EOFError: EOF when reading a line

此step方法出现EOF错误,移除try块时出现val = input().split(' ')值错误

from collections import deque
n = int(input())
d = deque()
for _ in range(n):
    try: 
    method, val = input().split(' ')
        if method == 'append':
            d.append(val)
        if method == 'appendleft':
            d.appendleft(val)
    except ValueError:
        a = input()
        if str(a) == 'pop':
            d.pop()
        else:
            d.popleft()
print(d)

给定的输入是:

 6
 append 1
 append 2
 append 3
 appendleft 4
 pop
 popleft

你遇到问题是因为你在 except 中使用 input() 所以在一个循环中它读取两行 - 第一行在 try 中然后在 except 中 - 所以最后你少行。

错误 ValueErrormethod, val = ... 引发,它在 input() 之后执行 - 因此该行已从缓冲区中删除,并且缓冲区中的行更少。当您在 except 中运行下一个 input() 时,它不会读取同一行而是读取下一行 - 所以您在一个循环中得到太多行。

您应该首先读取行并分配给单个变量,然后您应该尝试将其拆分为两个变量。

line = input()

try: 
    method, val = line.split(' ')

    # ... code ...
    
except ValueError:
    method = line

    # ... code ...

而不是try/except你可以先分割线并分配给单个变量

#args = input().strip().lower().split(' ')
args = input().split(' ')

稍后检查 len(args)

args = input().strip().lower().split(' ')

if len(args) == 2:
    method = args[0]
    val = args[1]

    # ... code ...

elif len(args) == 1:
    method = args[0]

    # ... code ...

else:
    print('Wrong number of arguments')