zoukankan      html  css  js  c++  java
  • 【原创】由于python的导入方式引起的深坑

    目录结构:

    test/

      sacc/

        __init__.py

        app.py

        logger.py

        /views

          __init__.py

          main.py

    事情是这样的,logger里面是一个类LoggerFactory, 这个类里面有一个类变量保存着日志logger,同时有一个get函数和一个init函数,init函数负责初始化,get负责获取这个logger。

    我在app.py初始化之后,并在随后的处理过程中打印了日志,app.py调用了main.py的函数,在main.py里面的函数中首先通过LoggerFactory调用get获取logger,然后打印输出。

    出现了问题:

      在main里面获取的是None。

    原因:

      我在app.py使用 from logger import LoggerFactory 导入LoggerFactory

      在main里面使用from sacc.logger import LoggerFactory 导入,sacc的父目录已经加入sys.path,所以是可以加载的。

      这俩种方式导入会导致在sys.modules中是俩个不同的模块,使用id(module_or_class)可以判断这俩个是不容的对象,因此导致main.py获取到的logger为None

    附:

    Python import 的搜索路径

    • 在当前目录下搜索该模块
    • 在环境变量 PYTHONPATH 中指定的路径列表中依次搜索
    • 在 Python 安装路径的 lib 库中搜索
  • 相关阅读:
    数据库被挂马3
    將目標網址轉換成HTML
    四步堵死3b3.org c.js注入
    GBK与UTF8编码选择与区分
    C#连Oracle数据库
    Session过期时间的四种设置方式
    怎么从内容页访问母板页
    Response.Charset与Response.ContentEncoding的区别
    CommandBehavior.CloseConnection的使用
    尽可能的使用强类型
  • 原文地址:https://www.cnblogs.com/pengyusong/p/6212167.html
Copyright © 2011-2022 走看看