OSError: [Errno 22] Invalid argument が出る原因と解決法

Last Updated on 2025年7月28日

Pythonでファイル操作やネットワーク通信を行っていると、突然現れるのが OSError: [Errno 22] Invalid argument というエラーです。

この記事では、OSError: [Errno 22] の発生原因から具体的な修正例まで、初心者の方にも分かりやすく解説します。

目次

OSError: [Errno 22] Invalid argument とは

このエラーは、Pythonがシステムコール(OSへの操作)を行った際に、「不正な引数(Invalid argument)」が渡されたときに発生します。

一見すると「何が間違っているのか分からない」非常に曖昧なエラーですが、多くの場合は次のような操作に起因します:

  • ファイルのパス指定ミス
  • 日付・時間のフォーマットミス
  • システム依存の値を間違えている

よくある原因と具体例

OSError: [Errno 22] が発生するタイミングは様々ですが、代表的なケースを紹介します。

① 開くファイルのパスが不正

→ ディレクトリを「ファイル」として開こうとしているためエラー。

② ファイル名に禁則文字(Windows)

→ 「/」はファイルパスとして解釈され、存在しないパスとしてエラー。

③ datetime での不正な値

→ 存在しない日付でエラー。

ファイル関連でのOSErrorは、ほぼ以下のミスが原因です:

  • ファイル名に :/ などの予約文字が含まれている
  • 空文字列のファイル名
  • 読み取り専用ファイルに書き込みしようとする
  • 存在しないディレクトリに保存しようとする

修正例:

日付と時刻のエラーに注意

datetimeモジュールでOSErrorを引き起こすことがあります。例えば、存在しない日付や0時未満の時刻など。

例:

また、タイムスタンプの範囲外(1970年以前、2100年以降)などでも問題が起こります。

Windows環境での注意点

Windows特有の原因として、以下のような制約があります:

  • ファイル名に使えない文字:\ / : * ? " < > |
  • ファイルパスの最大長:260文字(拡張設定で解除可)
  • 予約語:CON, PRN, AUX, NUL など

対処法:

  • ファイル名の整形時には正規表現でチェック
  • パス長が長くなる場合は \\?\ 接頭辞を付ける(高度な対応)

エラー解消のチェックリスト

OSError: [Errno 22] が出たら、まず以下を確認しましょう:

  1. ファイルパスやファイル名に誤りがないか
  2. ファイルの読み書きモードが正しいか
  3. ディレクトリとファイルを混同していないか
  4. datetimeなどで不正な日付や時間を指定していないか
  5. Windowsで禁則文字を使っていないか

よくある質問と補足情報

Q. LinuxやMacでもこのエラーは出る?

はい、出ます。ただし原因が異なるケースも多いです。たとえば、システムのファイルディスクリプタ制限など。

Q. Pythonのバージョンによって挙動は変わる?

一部のバージョンでは、エラーメッセージが詳細になっていることがあります。できる限り最新バージョンを使用することをおすすめします。

Q. 一時ファイルでこのエラーが出るのはなぜ?

tempfileで生成した一時ファイルが閉じられていたり、パスが削除されているとこのエラーが出ます。


エラーは学習のチャンスです。同じエラーが再発しないよう、この記事で紹介したチェックポイントを習慣化しておきましょう。

他にもPythonエラーの記事を多数公開していますので、ぜひブックマークしておいてください。