Python3 NameError: name 'open' is not defined处理办法

一、说明

之前默认以为python的open方法用存哪里都没什么区别的,然后昨天直接在"__del__()"中使用今天同事跑程序时反馈程序报错“Python3 NameError: name 'open' is not defined”。

排查之后发现是在"__del__()"中使用open方法所致,处理办法是在别的地方打开文件保存成成员变量而不要在"__del__()"中使用open,原理则尚不太清楚。

二、程序示例

2.1 报错程序

报错代码如下:

class OpenTest():
def __init__(self):
pass # 在del中使用open方法会报错
# 注意,除了下面演示的在del中直接使用open方法外,还包括del调用的函数中使用open方法的场景
def __del__(self):
file_obj = open("test.txt","w+", encoding="utf-8")
file_obj.writelines("test context\n")
file_obj.close() if __name__ == "__main__":
obj = OpenTest()

报错截图如下:

Python3 NameError: name 'open' is not defined处理办法

2.2 不报错程序

代码如下:

class OpenTest():
def __init__(self):
# 也不一定要在init中打开,在del之外的地方打开都可以
self.file_obj = open("test.txt","w+", encoding="utf-8")
pass # 在del中使用open方法会报错
# 注意,除了下面演示的在del中直接使用open方法外,还包括del调用的函数中使用open方法的场景
def __del__(self):
# file_obj = open("test.txt","w+", encoding="utf-8")
self.file_obj.writelines("test context\n")
self.file_obj.close() if __name__ == "__main__":
obj = OpenTest()
上一篇:《LINUX3.0内核源代码分析》第二章:中断和异常 【转】


下一篇:捕获网络数据包并进行分析的开源库-WinPcap