zoukankan      html  css  js  c++  java
  • 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
    ")
            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
    ")
            self.file_obj.close()
    
    if __name__ == "__main__":
        obj = OpenTest()
  • 相关阅读:
    转载C#基础概念二十五问
    C# 文件路径、目录、I/O常见操作汇总
    最简单lru缓存及改进版本(java备忘)
    我的游戏观
    寂静岭 破碎的记忆
    居然又回来了,CSDN博客太不方便了
    Game Physics Engine Development 粗略翻译
    就这么定了
    绘画 程序 人生
    也谈Maxscript
  • 原文地址:https://www.cnblogs.com/lsdb/p/10599182.html
Copyright © 2011-2022 走看看