0

此步骤方法中发生 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
4

1 回答 1

1

你有问题,因为你使用input()inside except,所以在一个循环中它读取两行 - 第一个try和下一个except- 所以最后你有更少的行。

错误ValueError是由method, val = ...which 在之后执行的input()- 所以这条线已经从缓冲区中删除,并且缓冲区中的行更少。而当你下一个运行时input()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')
于 2021-05-08T14:05:55.120 回答