Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python文件在程序退出时关闭_Python_File_Keyboardinterrupt - Fatal编程技术网

Python文件在程序退出时关闭

Python文件在程序退出时关闭,python,file,keyboardinterrupt,Python,File,Keyboardinterrupt,如果我想关闭具有无限循环的程序中的文件,我可以执行以下操作: file = open('abc', 'w') while True: try: file.write('a\n') except KeyboardInterrupt: break file.close() 但如果我就这样离开它: file = open('abc', 'w') while True: file.write('a\n') 退出时文件不会关闭吗?Pytho

如果我想关闭具有无限循环的程序中的文件,我可以执行以下操作:

file = open('abc', 'w')

while True:
    try:
        file.write('a\n')
    except KeyboardInterrupt:
        break

file.close()
但如果我就这样离开它:

file = open('abc', 'w')

while True:
    file.write('a\n')

退出时文件不会关闭吗?

Python已经关闭了。垃圾收集是自动清除内存中未使用的文件句柄或数据。当python程序停止时,如果它完全停止,它将释放关闭时使用的内存和文件句柄。在编写长时间运行的程序或访问大量信息或文件的程序时,熟悉垃圾收集的工作原理是明智的。垃圾收集是自动清除内存中未使用的文件句柄或数据。当python程序停止时,如果它完全停止,它将释放关闭时使用的内存和文件句柄。在编写长时间运行或访问大量信息或文件的程序时,最好熟悉垃圾收集的工作原理。

正如@Mitch Jackson前面提到的,如果python程序完全停止,它将释放内存。在您的情况下,因为您只是在while循环中打开一个文件。程序停止时将无法关闭已打开的文件,除非您明确包含异常处理,如
try catch block
或将其打包的
with
语句


下面是关于
的文档,其中包含
语句:

正如@Mitch Jackson所提到的,如果python程序完全停止,它将释放内存。在您的情况下,因为您只是在while循环中打开一个文件。程序停止时将无法关闭已打开的文件,除非您明确包含异常处理,如
try catch block
或将其打包的
with
语句


下面是关于
语句的文档:

程序退出时关闭的文件可能重复的可能重复与垃圾收集无关。我想这取决于“关闭”的含义。如果python程序已退出,无论是从中断还是从正常结束,它将释放所有打开的文件句柄。在我更熟悉的perl中,如果已打开文件的函数退出,垃圾收集器确定文件句柄没有更多引用,文件句柄将被释放,文件将被“关闭”。如果您担心文件锁定,这是非常有条件的。与程序示例无关。另外,当程序退出时关闭的文件与垃圾收集无关。我想这取决于你所说的“关闭”的意思。如果python程序已退出,无论是从中断还是从正常结束,它都将释放其打开的所有文件句柄。在我更熟悉的perl中,如果已打开文件的函数退出,垃圾收集器确定文件句柄没有更多引用,文件句柄将被释放,文件将被“关闭”。如果您担心文件锁定,这是非常有条件的。与程序示例无关。也与同一问题无关