Collections.deque() EOFError:读取一行时的EOF

问题描述

此步骤方法发生EOF错误删除try块时发生val = input().split(' ') value错误

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

解决方法

你有问题,因为你在 input() 中使用了 except,所以在一个循环中它读取两行 - 首先在 try 中,然后在 except 中 - 所以最后你有更少线。

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

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

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')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...