python中的Make和write-to-file使但不写入或关闭fi

2024-09-30 08:17:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有趣的问题,我正在努力解决。我有一个很大的程序,在这个程序的一部分,我制作了一个.xml文件并写入其中(只使用字符串,不使用lxml或其他任何东西)。我把那个特定的代码放到它自己的程序中进行测试,结果遇到了一个问题。代码是

import os
directory = 'FileDirectory'
name = 'Test File.xml'

if not os.path.exists('K:\\JOBS\\' + directory + '\\XML Files\\'):
    os.makedirs('K:\\JOBS\\' + directory + '\\XML Files\\')
xmlJob = open('K:\\JOBS\\' + directory + '\\XML Files\\' + name, 'w')
try:
    xmlJob.write('Test write')
except:
    print "Unexpected error:", sys.exc_info()[0]
    raise
xmlJob.close

代码一直运行,没有给我任何错误,except不会触发,但是当文件被生成时,其中没有写入任何内容。另外,如果不先关闭Python,我就不能删除文件,因此.close似乎也不会发生。但是如果我把print语句放在.write和.close之后,它们都会触发,所以程序应该会命中所有行。上面的文字是整个程序,所以没有其他东西可以搅乱它。在

现在,当我改为使用一切正常。所以代码

^{pr2}$

运行良好。显然我可以用with代替open和.close,但是现在我想弄清楚第一个选项失败的原因。我已经在其他程序中使用了几乎完全相同的代码来写日志文件之类的,然后它就起作用了。有人有什么想法吗?在


Tags: 文件代码nametest程序closeosjobs
1条回答
网友
1楼 · 发布于 2024-09-30 08:17:08

通过键入xmlJob.close可以引用xmlJob对象上的类方法close,但不调用它。在

注意以下事项:

>>> f = open("tmp.txt")
>>> f
<open file 'tmp.py', mode 'r' at 0x7f906e8c5ae0>
>>> f.close
<built-in method close of file object at 0x7f906e8c5ae0>
>>> f
<open file 'tmp.py', mode 'r' at 0x7f906e8c5ae0>
>>> f.close()
>>> f
<closed file 'tmp.py', mode 'r' at 0x7f906e8c5ae0>

调用f.close只打印该方法的^{}表示,而不调用它。在

您的第二个代码块工作的原因是with open(x) as y构造具有syntactic sugar behind the scenesalot。除了异常处理外,它还可以干净地处理对象的关闭。这意味着一旦到达with块的末尾,就不需要手动关闭文件。在

相关问题 更多 >

    热门问题