Pythonのerrnoモジュールで標準エラーコードを取得・活用する方法
すべてのプログラミング言語には何らかのエラーハンドリング機構が備わっており、その多くは処理系にあらかじめ組み込まれた標準的なエラーコードを持っています。Pythonでも、errnoモジュールを通じて、OSやシステムレベルで定義された標準エラーコードにアクセスすることができます。本記事では、組み込みのエラー番号とエラーコードの一覧を取得する方法と、それらを実際の例外処理で活用する具体例を解説します。
エラーコードの一覧を取得する
次のプログラムでは、Pythonに組み込まれているエラー番号と、それに対応するエラーの説明文を一覧表示します。ここではerrnoモジュールとosモジュールを組み合わせて使用します。
サンプルコード
import errno
import os
for i in sorted(errno.errorcode):
print(i, ':', os.strerror(i))
実行結果
上記のコードを実行すると、以下のような出力が得られます。
1 : Operation not permitted 2 : No such file or directory 3 : No such process 4 : Interrupted function call …… ……
errno.errorcodeは、エラー番号をキー、エラー名(シンボル)を値とする辞書です。これをソートして順に出力し、さらにos.strerror()を組み合わせることで、各エラー番号に対応する人間が読める形式の説明文も一緒に表示しています。
続いて、実際にエラーが発生した際に、そのエラーコードを判定して適切に処理する方法を見ていきましょう。ここでは「No such file or directory(ファイルやディレクトリが存在しない)」というエラーを例に取り上げます。
サンプルコード
try:
file_name = open('Data.txt')
# 2は「No such file or directory」を意味する
except IOError as e:
if e.errno == 2:
print(e.strerror)
print("File to be printed no found")
# 例外への対応処理
elif e.errno == 9:
print(e.strerror)
print("File will not print")
実行結果
上記のコードを実行すると、以下のような出力が得られます。
No such file or directory File to be printed no found
この例では、存在しないファイル「Data.txt」を開こうとしたため、IOError(現在のPythonではOSError)が発生します。例外オブジェクトのe.errno属性にはエラー番号が格納されているため、その値を比較することで、発生したエラーの種類を特定し、状況に応じた処理へ分岐させることができます。また、e.strerror属性を参照すれば、エラーの内容を表す文字列を取得することも可能です。このようにerrnoを活用することで、単一の例外クラスでも、よりきめ細かいエラーハンドリングを実現できます。
-
PAGE_FAULT_IN_NONPAGED_AREAエラーの原因と対処法を徹底解説
Windowsの使用中にブルースクリーン(BSOD)が発生し、「PAGE_FAULT_IN_NONPAGED_AREA」というエラーメッセージとバグチェックコード(BCCode)「0x00000050」が表示された場合、その原因は故障したハードウェア、破損したシステムファイル、ウイルスやマルウェアへの感染、アンチウイルスソフトの不具合、RAMメモリの不良、あるいはNTFSボリューム(ハードディスク)の破損などが考えられます。このストップエラーは、要求されたデータがメモリ上に見つからない、つまりメモリアドレスが不正である場合に発生します。システムへの損傷を防ぐため、PCは自動的に再起動されますが
-
システム復元エラー 0x800700B7 の解決方法【完全ガイド】
システム復元エラー 0x800700B7 の修正方法:Windowsの「バックアップと復元」機能を使用していると、「システム復元は正常に完了しませんでした」というメッセージとともに、エラーコード 0x800700B7 が表示されることがあります。このエラーは、原因不明の問題が発生し、システム復元プログラムの実行が妨げられていることを意味します。 特定の原因は明確ではありませんが、これまでの調査から、主に以下の要因が考えられます。 アンチウイルスソフトウェアがシステムと競合している サードパーティ製ソフトウェア、ウイルス、マルウェアなどにより、レジストリエントリやシステムファイルが破損してい