Python 当os.mkdir()不应该返回错误时,为什么它会返回错误';t(初学者问题)?

Python 当os.mkdir()不应该返回错误时,为什么它会返回错误';t(初学者问题)?,python,Python,好吧,这可能不是最漂亮的代码(我还在学习),但我希望在程序第一次运行时使用os.mkdir()创建一个文件夹 不幸的是,我一直收到这个错误 FileExistsError:[WinError 183]无法创建已存在的文件:“资产” 所以我设计了一个创建文本文件的小函数。如果文本文件读取true,则不会发生任何事情。否则,它将创建一个文本文件并将true写入其中。然后,下次运行程序时,os.mkdir()将不会运行,也不会出现错误 我仍然不断得到错误,即使假设它应该从文件中读取true,并pass

好吧,这可能不是最漂亮的代码(我还在学习),但我希望在程序第一次运行时使用os.mkdir()创建一个文件夹

不幸的是,我一直收到这个错误
FileExistsError:[WinError 183]无法创建已存在的文件:“资产”

所以我设计了一个创建文本文件的小函数。如果文本文件读取
true
,则不会发生任何事情。否则,它将创建一个文本文件并将
true
写入其中。然后,下次运行程序时,os.mkdir()将不会运行,也不会出现错误

我仍然不断得到错误,即使假设它应该从文件中读取
true
,并
pass
,而不是尝试运行os.mkdir()

再说一次,这可能不是最好的方法,但我希望得到一些答案,为什么我一直得到这个错误

多谢各位

import os

def init_files():
    #creates the initial files for the game to run properly

    init_file = open('init_file_check.txt', 'w+')
    init_file_check = str(init_file.read())
    init_file.close()

    #checks to see if os.mkdir() needs to be run or if already run

    if init_file_check == 'true':
        pass
    else:
        os.mkdir('Assets')
        
        init_file = open('init_file_check.txt', 'w+')
        init_file.write('true')
        init_file.close()
init_files()

如果已有同名的文件或目录,则会发生此错误。下面是一个小示例,要演示输出(我从一个空目录开始):

打开('test','w')。关闭() >>>导入操作系统 >>>os.mkdir(‘测试’) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 FileExistError:[WinError 183]无法在文件已存在时创建该文件:“测试” >>>打开('test.txt','w')。关闭() >>>os.remove('test') >>>os.mkdir(‘测试’) >>>os.mkdir(‘测试’) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 FileExistError:[WinError 183]无法在文件已存在时创建该文件:“测试” 首先,我创建文件“test”,然后创建一个该名称的目录,但没有用。删除文件并创建名为“test.txt”的文件后,我可以成功创建名为“test”的目录。
但是,现在我无法创建该名称的另一个目录。

如果已经存在具有该名称的文件或目录,则会发生此错误。下面是一个小示例,要演示输出(我从一个空目录开始):

打开('test','w')。关闭() >>>导入操作系统 >>>os.mkdir(‘测试’) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 FileExistError:[WinError 183]无法在文件已存在时创建该文件:“测试” >>>打开('test.txt','w')。关闭() >>>os.remove('test') >>>os.mkdir(‘测试’) >>>os.mkdir(‘测试’) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 FileExistError:[WinError 183]无法在文件已存在时创建该文件:“测试” 首先,我创建文件“test”,然后创建一个该名称的目录,但没有用。删除文件并创建名为“test.txt”的文件后,我可以成功创建名为“test”的目录。
但是,现在我无法创建另一个同名目录。

不要进行任何检查。如果需要目录,请创建它。如果它已经存在,
os.mkdir
将引发一个异常,您可以捕获并忽略该异常

def init_files():
    try:
        os.mkdir('Assets')
    except FileExistsError:
        pass

此功能的最终结果是
资产
将存在,无论以前是否存在。(忽略有人可能在您创建它之后删除它的事实,但您对此无能为力。)



否则,您将面临竞争条件。您可以检查目录是否不存在,但在您的代码执行之前,总是有可能有其他人创建目录。
os.mkdir
,在这种情况下,您必须随时准备捕获异常。

不要进行任何检查。如果需要目录,请创建它。如果它已经存在,
os.mkdir
将引发一个异常,您可以捕获并忽略该异常

def init_files():
    try:
        os.mkdir('Assets')
    except FileExistsError:
        pass

此功能的最终结果是
资产
将存在,无论以前是否存在。(忽略有人可能在您创建它之后删除它的事实,但您对此无能为力。)



否则,您将面临竞争条件。您可以检查目录是否不存在,但在您的代码执行之前,其他人总是可以创建目录的。
os.mkdir
,在这种情况下,您必须随时准备捕获异常。

下面是代码不起作用的详细原因:

  • 您使用了
    w+
    ,每当执行此行时,它都会删除
    txt
    文件中的内容:
第一次执行程序时,您不会遇到任何问题,但第二次重新运行程序时会出现问题,因为上面的代码行将覆盖包含
true
word的txt文件,并且txt文件将为空,从而导致
init_file.read()
每次执行时都为空。 所以每次运行程序时,
else
条件都会执行,因为
w+
会擦除文件中的所有内容

解决方案:

导入操作系统
def init_文件():
#创建游戏正常运行的初始文件
如果os.path.exists(os.path.join('init\u file\u check.txt'):
通过
其他:
尝试:
os.mkdir(“资产”)
init_file=open('init_file_check.txt','w+'))
init_file.write('true')
init_file.close()
除:
通过
init_文件()

下面是代码不起作用的详细原因:

  • 您使用了
    w+
    ,每当执行此行时,它都会删除
    txt
    文件中的内容:
第一次执行程序时,您不会遇到任何问题,但当您第二次重新运行程序时,问题会出现,因为上面的代码行将覆盖包含
true
word的txt文件,并且您的txt文件将为空,这将导致
init_file.read()
被删除