请各位看一下,到底什么原因,得不到想要的结果

问题遇到的现象和发生背景

stu_list为学生信息列表,内容如下
{'id': 118, 'name': '李四', 'english': 90, 'python': 80, 'java': 88}
{'id': 111, 'name': '李二', 'english': 100, 'python': 100, 'java': 100}
{'id': 114, 'name': '王三', 'english': 90, 'python': 90, 'java': 80}
现,需要实现删除信息的功能

问题相关代码,请勿粘贴截图

def delete():
file=open('stu_list.txt','r',encoding='utf-8')
lst=file.readlines()
file.close()
dein=input('请输入学生姓名')
for info in lst:
d=dict(eval(info))
if d['name']==dein:
print(d)
answer=input('请问确定需要删除吗')
if answer=='y' or answer=='Y':
lst.remove(info)
file=open('stu_list.txt','w',encoding='utf-8')
file.writelines(lst)
file.close()
print('删除完毕')
else:
print('返回')
delete()
else:
print('学生不存在,重新输入')
delete()

运行结果及报错内容

img

我的解答思路和尝试过的方法

输出d失败,
但是将d下方以后的注释掉即可正常输出

img

我想要达到的结果

两个问题:
1、for中该 else 子句在循环正常完成时执行,这意味着循环没有遇到任何 break 语句。for是正常运行的,自然输出else答案

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print( n, 'equals', x, '*', n/x)
            break
    else:
        # loop fell through without finding a factor
        print(n, 'is a prime number')

给出官方示例,自己运行一下看看,for正常运行完了就输出else,被break掉的就不会输出。
2、

l = [1,2,3]
for i in l:
    l.remove(i)
    print(l)
[2, 3]
[2]

能看出来区别么,你删了1的话,2就在1的位置上了,接下来取得数就成了3!
所以你可以选择定义两个列表