私が取り組んでいるプロジェクトからのトレースバックは次のとおりです。
/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
に)、パッケージ化でよく知られており、多くのこと、特にパッケージ管理やバグ報告 ( apport
/ ubuntu-bug
) などで Python に依存しています。
imp
「バージョン 3.4 から非推奨: imp パッケージは、importlib を支持して非推奨となるまで保留中です。」. 私のマシンは少なくとも Python 3.4.3+ 以上を実行しており、ソフトウェアを完全に最新化して更新するには時間と多くの作業が必要であるため、この警告は理解できます。
しかし、私のプログラムは、またはの近く には行きません。私の質問は、のソースから派生した警告がのログに書き込まれないか、またはの親プロセスによって確実に収集されないのはなぜですか?imp
importlib
apport
apport
apport
stderr
apport
私がこれを推測しなければならなかった場合、それは開発者がバッファリングすることを決定したためです-しかし、決してフラッシュも書き込みもしない-ので、次にシステム上apport
の子プロセスが書き込みのために開かれるとき(私のプログラムのエラーとして)した)、apport の bufferedも書き込まれます。stderr
python
stderr
stderr
これは、Unix に関する私 (私が思う) の知識ではサポートされていません。なぜ 2 つの別々の Python インスタンスがこのように相互作用するのでしょうか?
リクエストに応じて、MCVE に対して私ができる最善の方法は次のとおりです。モジュール レベルのインポートのリストです。
import readline
import os
import sys
import warnings
import types
import typing
輸入しているからwarnings
ですか?でも……まだ触らないapport
。
この質問はより話題に沿ったものであり、 AskUbuntuまたはUnix & Linuxよりも SO でより良い回答が得られると思います。そうでないと強く感じる場合は、移行のためにフラグを立てますが、モッズは私に同意すると思います.