以下是我的整个计划..我只是不知道我是不是错了 它一直在告诉这个过程正在被其他文件使用......我只是不明白 请帮助我,因为我需要在两天内提交这个
import os
import pickle
password=123
l=input("Enter Password :")
if l==password:
print"--------Welcome Admin--------"
class new:
def __init__(self,a,b,c):
self.acno=a
self.acna=b
self.ini=c
def display(self):
print self.acno,self.acna,self.ini
def form(): # creating new account holders
print" ---New Account Entry Form--- "
n=input("Enter the no. Forms")
f1=open("new.dat","ab")
for i in range (n):
a=input("Enter The Account No:")
b=raw_input("Enter The Name of The Account Holder:")
c=input("Enter The Initial Amount (>=5000 ):")
if c<5000:
print "Initial Amount Too Low"
c=input("Enter The Initial Amount (>=5000 ):")
e=new(a,b,c)
pickle.dump(e,f1)
f1.close()
print"--------Account Created Successfully--------------"
def depo():#depositing amount in the account
print" ---- Account Deposition Form ---- "
p=input("Enter the Account Number:")
f1=open("new.dat","rb")
f2=open("dep.dat","wb")
amt=input("Enter the Amount to Deposit :")
try:
while True:
s=pickle.load(f1)
if s.acno==p:
s.ini+=amt
pickle.dump(s,f2)
except EOFError:
f1.close()
f2.close()
print"Amount Deposited Successfully"
os.remove("new.dat")
os.rename("dep.dat","new.dat")
def withdraw():#to withdraw
print " Account Transaction Form "
p=input("enter the account n:")
f2=open("new.dat","rb")
f3=open("f2.dat","wb")
amt=input("Enter the amount to Withdraw:")
try:
while True:
s=pickle.load(f2)
if s.acno==p:
if s.ini>amt or s.ini==amt :
s.ini-=amt
pickle.dump(s,f3)
print "Amount Withdrawed"
elif s.ini<amt:
print "No sufficient balance "
else:
print " Account no. invalid"
except EOFError:
f2.close()
f3.close()
os.remove("new.dat")
os.rename("f2.dat","new.dat")
def balance():#check the balance
print" Balance Amount Details"
p=input("Enter the Account Number:")
f3=open("new.dat","rb")
try:
while True:
s=pickle.load(f3)
if s.acno==p:
print "the Balance Amount for Acc. no. ",p,"is :", s.ini
except EOFError:
f3.close()
def displa():#display all the account holders
print " All Account Holders List "
f1=open("new.dat","rb")
try :
while True:
k=pickle.load(f1)
k.display()
except EOFError:
f1.close()
def dele(): # to delete the account holder error here
print " Account Deletion Form"
f1=open("new.dat","rb")
f2=open("tnew.dat","wb")
try:
e=pickle.load(f1)
no=input("Enter the Account No:")
if e.acno!=no:
pickle.dump(e,f2)
except EOFError:
f2.close()
f1.close()
os.remove("new.dat") #error here
os.rename("tnew.dat","new.dat") # error here
f1.close()
while True:
print"-----------------------------------------------------------------------------------------------------------------"
print" Bank Management System"
print" "
print"---Main Menu--- :"
print"1. New account"
print"2. Deposit amount"
print"3. Withdraw amount"
print"4. Balance account"
print"5. All Account Holders List "
print"6. Close An Account"
print"7. Exit"
choice=input("Enter Your Option (1-7):")
if choice==1:
form()
elif choice==2:
depo()
elif choice==3:
withdraw()
elif choice==4:
balance()
elif choice==5:
displa()
elif choice==6:
dele()
else:
print "-------Login In Later----------"
break
else:
print "PASSWORD Incorrect"
答案 0 :(得分:0)
尝试f1=open("new.dat","rb")
然后os.remove("new.dat")
而不先关闭它;您无法将其删除并发生错误,因为该文件位于其他进程的下方,换句话说,它正在阅读
你不应该用f = open(filename, 'x')
打开文件然后用f.close()
关闭,如果由于某种原因程序没有执行关闭,它可能会产生与你的问题完全相同的问题...
相反,尝试使用with open(filename, 'x') as f:
重写您的函数,它会在内部代码运行完成时自动关闭文件,或者在程序受到影响时自动关闭文件
http://effbot.org/zone/python-with-statement.htm
否则,如果你不想弄乱一切
(请注意,如果没有发生错误,您的函数会保持文件处于打开状态),
尝试使用except EOFError:
更改每个finally:
块,最后与使用with
相同。
来自消息来源:
&#34; try-finally结构保证了
finally
部分下的代码 总是被执行,即使执行工作的代码没有执行 。光洁度&#34;
这应该确保关闭