【问题标题】:Python 2.6 File exists errno 17,Python 2.6 文件存在 errno 17,
【发布时间】:2015-03-14 18:12:22
【问题描述】:

如果文件已经存在,我该如何摆脱错误 17 并发出警告消息?

import os, sys

# Path to be created
path = "/tmp/home/monthly/daily"

try:
   os.makedirs(path)
except OSError as e:
  if e.errno == 17:
     //do something

os.makedirs( path, 0755 );

print "Path is created"

但它仍然显示 ERRNO 17 消息。我能做什么?

【问题讨论】:

    标签: python python-2.7 exception error-handling path


    【解决方案1】:

    在第一次调用os.makedirs 后,将创建目录。 (如果目录已经存在,则不更改)

    第二次调用总是会引发异常。

    删除对makedirs的第二次调用:

    try:
        os.makedirs(path, 0755)
    except OSError as e:
        if e.errno == 17:  # errno.EEXIST
            os.chmod(path, 0755)
    
    # os.makedirs( path, 0755 )  <----
    

    【讨论】:

      【解决方案2】:

      我认为做你想做的事。当发生OSError 错误时,它会检查错误代码并在您有兴趣处理的情况下打印一条警告消息,否则它只会传播异常。注意 os.makedirs() 的可选 mode 参数会覆盖默认的 0777

      import errno, os, sys
      
      # Path to be created
      path = "/tmp/home/monthly/daily"
      
      try:
          os.makedirs(path, 0755)
      except OSError as e:
          if e.error == errno.EEXIST:  # file exists error?
              print 'warning: {} exists'.format(path)
          else:
              raise  # re-raise the exception
      
      # make sure its mode is right
      os.chmod(path, 0755)
      
      print "Path existed or was created"
      

      【讨论】:

        【解决方案3】:

        你可以创建一个变量来查看你是否创建了文件 像这样成功:

        import os, sys
        
        # Path to be created
        path = "/tmp/home/monthly/daily"
        
        created = False
        is_error_17 = False
        
        try:
           os.makedirs(path)
           created = True
        except OSError as e:
          if e.errno == 17:
             print 'File has benn created before'
             is_error_17 = True
             pass
        
        if created == True:
           print 'created file successfully'
        else:
           print 'created file failed.'
           if is_error_17 == True:
              print 'you got error 17' 
        

        如果第一次尝试捕获错误,则在您的代码中,第二个 os.makedirs(path, 0755);仍然会再次引发错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-18
          • 1970-01-01
          • 1970-01-01
          • 2013-06-06
          • 2021-09-27
          • 1970-01-01
          • 2012-08-25
          • 1970-01-01
          相关资源
          最近更新 更多