私信  •  关注

wim

wim 最近创建的主题
wim 最近回复了
2 年前
回复了 wim 创建的主题 » Python3查找两个纪元毫秒之间的持续时间

出于所有实际目的,你可能想与 timedelta 例子使用 只有 毫秒增量:

>>> from datetime import timedelta
>>> print(timedelta(milliseconds=15600000))
4:20:00
2 年前
回复了 wim 创建的主题 » 如何向所有新python的VenV添加默认包

有一个选择:

--system-site-packages
                      Give the virtual environment access to the system
                      site-packages dir.

所以如果你使用 python3 -m venv --system-site-packages .venv 然后,您可以在系统级别安装所有环境可用的软件包。你必须对系统级安装的软件包保持卫生。

如果您发行版上的系统python非常混乱,并且您无法从中删除不希望在venvs中可见的内容,那么您需要寻找另一个选项。

一种可能是将通用软件包安装到某个目标目录:

python3 -m pip install dep1 dep2 --target=/path/to/common

然后使包目录始终可见:

export PYTHONPATH=/path/to/common
2 年前
回复了 wim 创建的主题 » 如何在python f字符串中动态填充数字?

嵌套f字符串:

>>> pad = 4
>>> i = 1
>>> f"foo-{i:>0{pad}}"
'foo-0001'

元数据字段 Requires-Python 使用版本说明符语法,在 PEP 440 :

逗号(“,”)相当于逻辑上的 操作人员

2.7.12不大于 二者都 >=2.5,>=3.0,因此应拒绝安装。

包元数据可能不正确。他们本可以使用>=2.5,因为它已经包含了任何东西>=3.0。

旧版本的 pip 不要解析 需要Python 字段。对该元数据的检查仅适用于 pip>=9.0.0 .

4 年前
回复了 wim 创建的主题 » 什么是Python Buffin?

exc_type 是异常的类。 exc_val 是异常实例。 exc_tb 是一个回溯对象,其中有一个引用 types.TraceBackType .

一般来说

  • type(exc_val) is exc_type
  • exc_val.__traceback__ is exc_tb

请注意 __exit__ 当上下文管理器下的代码没有引发异常时仍调用,并且参数将 (None, None, None) 所以这三个参数都应该注释 可选择的 .

那么正确的注释应该如下所示:

def __exit__(self, exctype: Optional[Type[BaseException]],
             excinst: Optional[BaseException],
             exctb: Optional[TracebackType]) -> bool: ...

您可能想知道为什么这个API有三个参数,而其中两个参数可以从异常实例本身轻松确定。但并不总是这样,在较旧版本的Python中,可以将字符串作为异常来引发,而异常 __traceback__ 属性不存在 until Python 2.5 . 在Python2.7(!)中,仍然可以将旧样式的类作为异常进行提升

5 年前
回复了 wim 创建的主题 » 在python 3中解包语法

在文本对象中有十六进制编码的数据。所以,回到原始的十六进制字节,你可以 译码 文本字符串。请注意,这不是python 3.x中通常的约定(通常,文本字符串已经被解码)。

>>> codecs.decode('e207', 'hex')
b'\xe2\x07'

同样的便利功能:

>>> bytes.fromhex('e207')
b'\xe2\x07'

现在你可以 struct.unpack 那些字节。总而言之:

>>> asd = ['e2','07']
>>> text = ''.join(asd)
>>> encoded = codecs.decode(text, 'hex')
>>> struct.unpack("<H", encoded)
(2018,)

避免 python setup.py test tests_require ,这是一个“特征”的老生常谈。

这只是将测试dep下载到项目的安装目录中,这很少是开发人员希望或期望发生的事情!这在具有虚拟环境的现代CI工作流中不太适用,您希望将依赖项安装到站点包中。

The recommended way to do it using setuptools these days is with an extras_require tag. . 见 here 举个例子。

当前python项目是否应该列出 <4 在里面 python_requires (setup.py)还是不?

不,他们不应该这样做,因为Python4应该*与Python3.9向后兼容。别管它。需求说明符的上界只对以下项目有用 semver 或类似的。

Here is a core developer discussing Python 4 向后兼容:

我目前的预期是,Python4.0将仅仅是“Python3.9之后的版本”。就这样。语言没有深刻的变化,没有重大的向后兼容性中断——从Python3.9到4.0应该和从Python3.3到3.4一样平淡无奇

当Python4.0即将面世时,我们可以希望Python2会死掉,而Python3将被称为“Python”。

5 年前
回复了 wim 创建的主题 » 如何将中间件添加到pythons记录器中

这在stdlib中直接受支持 logging . 创建 SMTPHandler 并将其添加到日志配置中,配置为级别 logging.ERROR 。有几种日志配置方法可用,并记录在案 here .