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()

報錯截圖如下:

 

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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM