码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-03-26 11:59:44      阅读:1833      评论:0      收藏:0      [点我收藏+]

标签:class   col   pre   close   python   区别   说明   image   init   

一、说明

之前默认以为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()

 

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

标签:class   col   pre   close   python   区别   说明   image   init   

原文地址:https://www.cnblogs.com/lsdb/p/10599182.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!