Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python请求中的logging.NullHandler和_init__;upy.py文件位置_Python_Python 2.7_Python Requests - Fatal编程技术网

Python请求中的logging.NullHandler和_init__;upy.py文件位置

Python请求中的logging.NullHandler和_init__;upy.py文件位置,python,python-2.7,python-requests,Python,Python 2.7,Python Requests,我试图通过查看流行库中的代码来了解更多关于Python的知识。我提到的第一个库是Kenneth Reitz的python请求 我所做的只是git clone,现在我正在检查代码 我正在查看请求/包中的\uu init\uuuuuuuuuupy文件 我有几个问题要问: 为什么\uuuu init\uuuuuuuuuupy在请求/包中,而请求下不直接有一个\uuuuuuuuuuuuuuuuuuuuuuuuupy文件?或者是因为这是一个直接从github克隆并卸载的包,所以很简单吗 第二个问题涉及以下

我试图通过查看流行库中的代码来了解更多关于Python的知识。我提到的第一个库是Kenneth Reitz的
python请求

我所做的只是
git clone
,现在我正在检查代码

我正在查看
请求/包
中的
\uu init\uuuuuuuuuupy
文件

我有几个问题要问:

  • 为什么
    \uuuu init\uuuuuuuuuupy
    请求/包
    中,而
    请求
    下不直接有一个
    \uuuuuuuuuuuuuuuuuuuuuuuuupy
    文件?或者是因为这是一个直接从github克隆并卸载的包,所以很简单吗

  • 第二个问题涉及以下上述代码。我想知道的是
    NullHandler
    到底做了什么?我看了一下文档,有一个“无操作”处理程序意味着什么。库开发人员在哪里使用这个处理程序?我是说,它有什么特别之处


  • 在一个目录中有一个
    \uuuuu init\uuuuuu.py
    文件会将该目录变成一个Python包。它也不会将子目录转换为包。如果您查看源代码树,您将看到它是这样的(删除了不相关的文件)

    这定义了一个顶级包,
    请求
    ,以及子包
    请求.packages
    请求.packages.charade
    请求.packages.urllib3
    。定义这些包对于使它们能够正确导入是必要的

    要直接回答您提出的问题,直接在
    请求/
    下有一个
    初始化.py
    文件。整棵树上不止一棵

  • NullHandler
    不执行任何操作。它的存在使得对
    logging
    库的调用可以无条件地使用,即使用户没有配置任何记录器。基本上,当
    urllib3
    尝试记录任何内容时,所有连接到日志库的记录器都会被调用。如果未连接任何记录器,则日志库将发出警告。这些都很糟糕,因此这是一个解决方案,可以在不强制登录用户的情况下简化库代码

  • 在一个目录中有一个
    \uuuuu init\uuuuuu.py
    文件会将该目录变成一个Python包。它也不会将子目录转换为包。如果您查看源代码树,您将看到它是这样的(删除了不相关的文件)

    这定义了一个顶级包,
    请求
    ,以及子包
    请求.packages
    请求.packages.charade
    请求.packages.urllib3
    。定义这些包对于使它们能够正确导入是必要的

    要直接回答您提出的问题,直接在
    请求/
    下有一个
    初始化.py
    文件。整棵树上不止一棵

  • NullHandler
    不执行任何操作。它的存在使得对
    logging
    库的调用可以无条件地使用,即使用户没有配置任何记录器。基本上,当
    urllib3
    尝试记录任何内容时,所有连接到日志库的记录器都会被调用。如果未连接任何记录器,则日志库将发出警告。这些都很糟糕,因此这是一个解决方案,可以在不强制登录用户的情况下简化库代码


  • 根据我对
    请求
    的记忆,
    目录包含其他依赖项的镜像,作者决定将这些镜像与
    请求
    捆绑在一起,而不是作为依赖项添加。就我个人而言,我会简单地让他们依赖,如果必要的话引用一个特定的版本,但我相信他们使用捆绑方法是有原因的。在任何情况下,它都包含一个
    \uuuu init\uuuu.py
    ,因此代码可以将其视为一个模块,并执行如下操作:

    import requests.packages.urllib3
    
    如果您查看,您将看到在该目录中也确实有一个
    \uuuu init\uuuuuu.py
    。如果您想要有一个包的层次结构,您需要在每个级别上都有这样一个文件,尽管在最简单的情况下,它可以是一个空文件

    如果不将
    \uuuu init\uuuu.py
    放在目录中,Python将不会将其识别为包-这是为了防止意外地将模块包含在您不希望包含的位置。您可以想象有很多种方法可以将目录命名为与
    sys.path
    上其他地方的包相同的名称,并导致无法描述的混乱,但是由于其中不会有
    \uuuuu init\uuuuuuuuuuupy
    ,因此Python将忽略它

    为了回答您的第二个问题,
    NullHandler
    适用于出于某种原因方便使用日志处理程序,但实际上不想进行任何日志记录的情况。如果您使用的是一个执行日志记录的库,但在您的情况下,您实际上不想记录任何东西,那么您可以使用它—您可以安装一个
    NullHandler
    来丢弃这些日志记录消息,因为这比更改它们的库以去除日志记录代码要容易得多(而且是更好的做法)


    在这个例子中,我假设您可以添加一个替代日志记录,并简单地设置日志记录级别,这样实际上就不会生成任何消息,但可以说,只使用
    NullHandler
    更容易,
    packages
    目录包含其他依赖项的镜像,作者决定将这些镜像与
    请求捆绑在一起,而不是作为依赖项添加。就我个人而言,我会简单地让他们依赖,如果必要的话引用一个特定的版本,但我相信他们使用捆绑方法是有原因的。在任何情况下,它都包含一个
    \uuuu init\uuuu.py
    ,因此代码可以将其视为一个模块,并执行如下操作:

    import requests.packages.urllib3
    
    如果您查看,您将看到确实存在一个
    \uu ini
    
    import requests.packages.urllib3