我正在尝试添加课程表,管理员将在文本框中输入课程名称,然后将使用该名称创建文件夹。但是,如果课程已存在,则会发送一条错误消息,例如“课程已存在” “。这是我尝试过的
string=tk.StringVar()
label1=tk.Label(frame,text="Enter Course Name:",font=20,bg="#33BEFF")
label1.place(relx=0.25,rely=0.27)
coursetxt=ttk.Entry(frame,textvariable=string,text="")
coursetxt.place(relx=0.52,rely=0.27)
def addcourse():
name=coursetxt.get()
conn = pyodbc.connect('Driver={SQL Server};''Server=SHUMAILA\SHUM;''Database=FYP;''Trusted_Connection=yes;')
cursor=conn.cursor()
cursor.execute('insert into course(cname)values(?)',(name))
courses_f=os.chdir('G:\Shumaila\FYP\FYP\courses') #path where course folder are saved
course_folder=os.mkdir(name) #for creating course folder
if course_folder.path.exists in courses_f:
messagebox.showinfo("Message","Course is already exist")
else:
messagebox.showinfo("Message","Course is added")
course_folder=os.mkdir(name)
addbutton=tk.Button(frame,text="Add",bg='#FF6E33',command=addcourse)
addbutton['font']=myFont
addbutton.place(relx=0.40,rely=0.35,relwidth=0.20,relheight=0.10)
运行代码后,它给我这个错误
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'E1'
where E1 is the name of course I entered in textbox
,我希望此消息将显示在消息框中。
我也尝试这样做,但是它也不起作用
if name in os.chdir('G:\Shumaila\FYP\FYP\courses'):
messagebox.showinfo("Message","Course is already exist")
else:
os.mkdir(name)
messagebox.showinfo("Message","Course is added")
答案 0 :(得分:0)
让我们谈谈os.mkdir()
。
mkdir
创建具有给定路径的目录。如果路径是相对的,它将相对于当前工作目录创建它。我会避免这种情况,并使用完整路径。
(为什么?因为当前工作目录是全局目录,因此更改它可能会影响代码的其他部分。)
mkdir
始终返回无。
因此,如果您叫course_folder=os.mkdir(name)
,您只是将course_folder设置为None。
当您引用course_folder.path
时不存在。
让我们谈谈os.chdir()
。
chdir
更改当前工作目录。
当前工作目录仅在使用相对路径时才相关。您可能应该只使用完整路径,而永远不要更改它。
chdir
始终返回无。
因此,当您设置courses_f=os.chdir([whatever])
时,会将courses_f
设置为无。
类似地,当您检查是否name in os.chdir([whatever])
时,您只是在检查name in None
。
您应该如何解决?
您可以使用os.path.exists()
来检查是否已经有一个(文件夹或文件)名称(在之前调用os.mkdir()
。
这可能有竞争条件(其他人可以在两个调用之间创建文件),因此更好的方法可能是尝试创建它,并在失败时捕获异常。
答案 1 :(得分:0)
这是我所做的并且正在起作用。
def addcourse():
name=coursetxt.get()
conn = pyodbc.connect('Driver={SQL Server};''Server=SHUMAILA\SHUM;''Database=FYP;''Trusted_Connection=yes;')
cursor=conn.cursor()
cursor.execute('insert into course(cname)values(?)',(name))
os.chdir
if os.path.exists(name):
messagebox.showinfo("Message","Course is already exist")
else:
messagebox.showinfo("Message","Course is added")
os.mkdir(name)