6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】pytestでfaulthandlerを無効化する

Last updated at Posted at 2022-10-27

はじめに

pytestを触っていると、下記のような Windows fatal exceptionが大量に表示されたことはありませんか?

Windows fatal exception: code 0x80010108

Thread 0x0000625c (most recent call first):
  File "C:\Users\Hoge\AppData\Roaming\Python\Python38\site-packages\comtypes\__init__.py", line 185 in shutdown
Windows fatal exception: code 0x80010108

Thread 0x0000625c (most recent call first):
  File "C:\Users\Hoge\AppData\Roaming\Python\Python38\site-packages\comtypes\__init__.py", line 185 in shutdown

この例外はOSSライブラリに依存するものもあり、こちら側からはどうしようもない場合があります。
本稿では、このような例外が大量に表示される場合の対処法を紹介します。

環境

  • python: 3.10.6
  • pytest: 7.1.3

結論

下記のオプションをpytestに追記することで無効化されます。

pytest -p no:faulthandler

faulthandlerとは?

Pythonの標準ライブラリに含まれるモジュールです。

このモジュールは、例外発生時、タイムアウト時、ユーザシグナルの発生時などのタイミングでpython tracebackを明示的にダンプするための関数を含んでいます。これらのシグナル、SIGSEGV、SIGFPE、SIGABRT、SIGBUS、SIGILL に対するフォールトハンドラをインストールするには faulthandler.enable() を実行してください。python起動時に有効にするには環境変数 PYTHONFAULTHANDLER を設定するか、コマンドライン引数に -X faulthandler を指定してください。
(https://docs.python.org/ja/3/library/faulthandler.html より抜粋)

何のことだかといった感じですが、簡潔に言うと「セグフォをスタックトレースに出力するもの」になります。

セグフォとは?

「セグメンテーション違反」というものです。

ソフトウェアがアクセス禁止とされているメモリ上のエリアにアクセスしようとしたり、メモリ上の位置ごとに設定されているルールに違反してメモリにアクセスしようとするときに起こるものである。
(wikipediaより抜粋)

大量に出力されるWindows fatal exceptionは、基本的にメモリへのアクセス違反が原因で起こるわけなんですね。

pytest-faulthandlerというプラグインがあったけど…?

pytestのプラグインとして、pytest-faulthandlerというものがありますが、pytest 5.0 から pytest core に統合されました。
(詳細はこちら)

下記のオプションはレガシーなため、最初に紹介した方法で無効化してください。

pytest --no-faulthandler

おわりに

筆者がこのエラーに遭遇したのはpywinautocomtypesで、windowsアプリケーションの自動操作スクリプトをテストしていた時にでした。
似たような境遇で困っている方の一助になると嬉しいです。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?