这是我正在从事的项目的回溯:
/usr/lib/python3/dist-packages/apport/report.py:13: PendingDeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
import fnmatch, glob, traceback, errno, sys, atexit, locale, imp
Traceback (most recent call last):
...
File "./mouse16.py", line 1050, in _lit_string
rangeof = range(self.idx.v, self.idx.v + result.span()[1])
AttributeError: 'NoneType' object has no attribute 'span'
现在,我的代码中有一个已修复的错误导致回溯本身;任何。
我对第一行感兴趣:PendingDeprecationWarning
for not-my-code。我使用 Ubuntu(从路径中的存在可以看出apport
),它以打包和依赖 Python 做很多事情而闻名,特别是包管理和错误报告 ( apport
/ ubuntu-bug
) 之类的事情。
imp
确实已弃用:“自 3.4 版以来已弃用:imp 包正在等待弃用,以支持 importlib。” . 我的机器至少运行 Python 3.4.3+ 或更高版本,完全现代化和更新软件需要时间和大量工作,所以这个警告是可以理解的。
但是我的程序并没有靠近 imp
,importlib
或者apport
,所以我的问题是,为什么来自apport
' 源的警告没有写入' 的日志或肯定由on的父进程apport
收集?stderr
apport
如果我不得不对此进行猜测,那是因为开发人员决定缓冲 - 但从不刷新或写入 - apport
,stderr
因此下次python
系统上的子进程打开stderr
以进行写入时(作为我的程序中的错误确实),apport的缓冲stderr
也被写入。
我(认为我)对 Unix 的了解不支持这一点——为什么两个单独的 Python 实例会以这种方式交互?
根据要求,这是我能为 MCVE 做的最好的事情:模块级导入列表。
import readline
import os
import sys
import warnings
import types
import typing
是因为我进口warnings
吗?但是……我还是不碰apport
。
我认为这个问题比AskUbuntu或Unix & Linux更贴近主题,并且会在 SO 上得到更好的答案;如果您有强烈的感觉,请将其标记为迁移,但我认为模组会同意我的观点。