#python #if-statement #input #types #keyerror
Вопрос:
Я написал простую функцию для выполнения набора методов. может кто-нибудь сказать мне, почему я получил эту ошибку и как ее решить? Большое спасибо!
n = int(input())
s = set(map(int, input().split()))
N=int(input())
for i in range(N):
inputlist=input()
if len(inputlist)==3:
s.pop()
else:
newl=inputlist.split()
comand=newl[0]
val=int(newl[1])
if comand=='remove':
s.remove(val)
else:
s.discard(val)
--------------------------------------------------------------------------------------
"my input:"
3
1 2 3
2
pop
remove 1
KeyError Traceback (most recent call last)
<ipython-input-25-6ab5ebb8e508> in <module>
11 val=int(newl[1])
12 if comand=='remove':
---> 13 s.remove(val)
14 else:
15 s.discard(val)
KeyError: 1
Ответ №1:
вы получили ошибку, потому element{1}
pop
что раньше вы могли использовать try...except
, чтобы не получить ошибку, если element don't exist
.
попробуйте это:
n = int(input())
s = set(map(int, input().split()))
N=int(input())
for i in range(N):
inputlist=input()
if len(inputlist)==3:
s.pop()
else:
newl=inputlist.split()
comand=newl[0]
val=int(newl[1])
if comand=='remove':
try:
s.remove(val)
except:
print('val not exist')
else:
s.discard(val)
Комментарии:
1. @ZhengxiJiang, вы ищете только решение этой проблемы или решаете проблему всегда ::) другой ответ только решит эту маленькую проблему :)))
Ответ №2:
Когда вы используете pop
в наборе, он открывает первый элемент этого набора
В вашем случае вы сначала открываете первый элемент, который равен 1, и пытаетесь удалить его на следующем шаге. Что вызывает у вас ошибку, потому что этот элемент не может быть найден
Комментарии:
1. да, да, вот в чем причина, я тоже это выяснил, спасибо, чувак!