问题描述
此步骤方法发生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
中 - 所以最后你有更少线。
错误 ValueError
由 method,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')