文件不存在错误' w'模式

时间:2014-05-26 12:20:42

标签: python unit-testing

我遇到file()内置的奇怪行为。我使用unittest-xml-reporting Python包为我的单元测试生成结果。以下是打开文件进行写入的行,一个(显然不存在)的文件:

report_file = file('%s%sTEST-%s.xml' % \
                (test_runner.output, os.sep, suite), 'w')

(代码来自软件包' s Github page

但是,我收到以下错误:

...
File "/home/[...]/django-cms/.tox/pytest/local/lib/python2.7/site-packages/xmlrunner/__init__.py", line 240, in generate_reports
(test_runner.output, os.sep, suite), 'w')
IOError: [Errno 2] No such file or directory: './TEST-cms.tests.page.NoAdminPageTests.xml'

我发现这很奇怪,因为正如Python文档所述,如果使用w模式,如果文件不存在,则应该创建该文件。为什么会发生这种情况?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

来自man 2 read

   ENOENT O_CREAT  is  not  set  and the named file does not exist.  Or, a
          directory component in pathname does not exist or is a  dangling
          symbolic link.

选择:)

以人的方式:

  • 当前工作目录,./在运行此命令时被删除
  • ./TEST-cms.tests.page.NoAdminPageTests.xml存在,但是指向无处的符号链接
  • " W"在您的打开/文件调用中以某种方式搞砸了,例如如果您重新定义了file builtin

答案 1 :(得分:2)

file将创建一个文件,但不会创建目录。您必须先创建它,如here

所示

答案 2 :(得分:0)

似乎尝试在已经删除的目录中创建需要创建的文件(因为路径是.,并且很可能该目标已被删除了)。

我设法通过提供test_runner.output的绝对路径来修复此问题,并且现在已成功创建结果文件。