一、說明
之前默認以為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()
報錯截圖如下:
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()