以前默认觉得python的open方法用存哪里都没什么区别的,而后昨天直接在"__del__()"中使用今天同事跑程序时反馈程序报错“Python3 NameError: name 'open' is not defined”。python
排查以后发现是在"__del__()"中使用open方法所致,处理办法是在别的地方打开文件保存成成员变量而不要在"__del__()"中使用open,原理则尚不太清楚。函数
报错代码以下:spa
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()
报错截图以下:3d
代码以下:code
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()