【问题标题】:Collections.deque() EOFError: EOF when reading a lineCollections.deque() EOFError: 读取一行时出现 EOF
【发布时间】:2021-07-30 10:25:57
【问题描述】:

此步骤方法出现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

【问题讨论】:

  • edit您的帖子正确缩进代码,这里尝试/除了不匹配
  • 在我提出这个问题时发生了缩进
  • 是的,但现在你可以修复它,edit 并修复它
  • 我测试了代码,但得到的不是EOFError,而是ValueError: too many values to unpack (expected 2)。但是我看到了不同的问题-当您运行input().split(' ')时,它首先读取行,然后将其拆分-如果出现错误,则运行a = input(),它将读取下一行,而不是给出错误的行-所以你跳过一些线。你应该只运行一次input - 在try 之前 - 然后在tryexcept 中使用相同的文本。或者您应该将其拆分并分配给一个变量 - 即。 args - 并检查 len(arg) > 1
  • 您应该阅读行并分配给单个变量,然后将其拆分为try/except

标签: python if-statement collections valueerror deque


【解决方案1】:

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

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

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

line = input()

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

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

    # ... code ...

您可以先拆分行并分配给单个变量,而不是尝试/除外

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

【讨论】:

  • 是的,当我在 try/except 块之外读取输入时它起作用了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多