【VSCode・Python】F5でlaunch.jsonを実行してしまう原因と直し方
まず確認:今回のエラーに当てはまるか
VSCodeでF5キーを押したときに「SyntaxError: invalid character」と表示されても、すべてが同じ原因で発生しているとは限りません。
今回の解決策が当てはまるのは、トレースバックに「.vscode\launch.json」または「.vscode/launch.json」が表示されているケースです。
エラー名だけを見て設定を変更すると、本来はPythonファイル側にある問題を見落とす可能性があります。
最初にエラー画面のどこを確認すればよいかを整理してから、具体的な修正へ進みましょう。
エラー表示で確認する3つの場所
エラーが出たら、エラー名、対象ファイル、行番号の3点を順番に確認します。
まず「SyntaxError: invalid character(U+3002)」などのエラー名を確認します。
U+3002は日本語の句点を示すため、Pythonが「。」をコードの一部として読み込もうとした可能性があります。
ただし、エラー名だけでは、句点がPythonファイルに書かれているのか、別の設定ファイルに書かれているのかまでは判断できません。
次に、エラー名より上または下に表示されるファイルパスを確認します。
ファイルパスが「C:\プロジェクト名\.vscode\launch.json」のようになっていれば、Pythonプログラムではなく設定ファイルを実行しようとした可能性があります。
一方で「C:\プロジェクト名\main.py」のようにPythonファイルが表示されているなら、今回とは異なる原因を調べる必要があります。
さらに「line 2」などの行番号と、その直後に表示された文字列も確認します。
launch.jsonのコメント文や設定項目が表示されているなら、設定ファイルがPythonコードとして解釈されたと判断しやすくなります。
確認するポイントは次のとおりです。
- エラー名が「SyntaxError: invalid character」になっているか
- トレースバックがlaunch.jsonを指しているか
- 表示された行がlaunch.json内のコメントや設定項目か
- F5キーを押したときにどのタブを開いていたか
- どのデバッグ構成を選択していたか
エラー画面をすぐに閉じず、対象ファイルのパスだけでも控えておくと、その後の切り分けが簡単になります。
この記事の方法で直せるケース
今回の方法で直せる代表例は、launch.jsonを編集した直後に、そのタブを開いたままF5キーを押したケースです。
launch.jsonの「program」が「${file}」になっていると、VSCodeは現在アクティブなファイルをデバッグ対象として使います。
そのため、画面の中央にlaunch.jsonが表示されている状態では、launch.json自体が現在のファイルとして扱われます。
Pythonデバッガーはlaunch.jsonをPythonの実行対象として受け取り、ファイル内に書かれた設定やコメントをPythonコードとして解析しようとします。
launch.json内に日本語のコメントがある場合は、句点や全角記号の位置で「invalid character」が表示されることがあります。
コメントが英語だけで書かれていたとしても、JSON形式の波かっこやコロンはPythonプログラムとして正しい構文ではないため、別のSyntaxErrorが発生する可能性があります。
つまり、エラーが表示された文字そのものが根本原因ではありません。
本当の原因は、Pythonファイルではないlaunch.jsonが実行対象になっていることです。
このケースでは、launch.jsonを削除したり、日本語コメントをすべて消したりする必要はありません。
実行したいPythonファイルを正しく指定すれば解決できます。
別の原因を疑うべきケース
トレースバックがlaunch.jsonではなく、実行したい「.py」ファイルを指している場合は別の原因を確認します。
Pythonコードに全角の句読点、全角スペース、装飾用の引用符、コピー時に入った不可視文字が含まれていると、同じ種類のSyntaxErrorが出ることがあります。
Webページや文書ソフトからコードをコピーした直後は、半角記号が全角記号へ置き換わっていないかを確認してください。
たとえば、半角のコロン「:」が全角の「:」になっていたり、通常のダブルクォーテーションが装飾された引用符になっていたりすると、Pythonは正しく解析できません。
また、エラーが表示された行の直前に、かっこや引用符の閉じ忘れがある場合もあります。
Pythonは構文が崩れた位置ではなく、その次に解釈できなくなった位置をエラーとして示すことがあります。
対象ファイルが.pyであれば、まずその行と直前の数行を確認してください。
今回の記事では、トレースバックがlaunch.jsonを指しているケースを中心に解説します。
launch.jsonがPythonとして実行される原因
launch.jsonがPythonとして実行される原因は、設定ファイルの故障ではなく、デバッグ構成の「program」とアクティブタブの組み合わせにあります。
仕組みを理解すると、同じエラーが起きても短時間で原因を見つけやすくなります。
設定を修正する前に、launch.jsonが何をしているファイルなのかを簡単に確認しておきましょう。
launch.jsonはデバッグ方法を決める設定ファイル
launch.jsonは、VSCodeでデバッグを開始するときの条件を保存する設定ファイルです。
通常はプロジェクト内の「.vscode」フォルダーに置かれます。
このファイルでは、使用するデバッガー、起動方法、実行対象、引数、出力先などを指定できます。
「request」が「launch」の場合は、「program」で指定したファイルを新しく起動してデバッグします。
「args」は、Pythonプログラムへ渡すコマンドライン引数を配列で指定する項目です。
「console」では、出力を統合ターミナルへ表示するか、内部コンソールへ表示するかを指定できます。
「cwd」を設定している場合は、プログラムを実行するときの基準フォルダーも変更できます。
これらの設定を組み合わせることで、毎回同じ条件でデバッグを開始できます。
launch.jsonはPythonコードではなく、デバッグの開始条件をVSCodeへ伝えるための設定です。
そのため、通常はlaunch.jsonそのものをPythonデバッガーで実行することはありません。
launch.jsonを編集している最中にF5キーを押した場合でも、programが固定されていれば指定したPythonファイルが実行されます。
問題が起こりやすいのは、programに現在のファイルを表す変数が使われている場合です。
${file}は現在アクティブなファイルを指す
VSCodeの変数「${file}」は、エディターで現在開かれているアクティブファイルのパスへ置き換えられます。
デバッグ構成が「”program”: “${file}”」なら、F5キーを押した時点で前面に表示されているファイルが実行対象になります。
main.pyを開いていればmain.pyが実行され、sample.pyを開いていればsample.pyが実行されます。
この動きは、複数のPythonファイルをその都度切り替えて実行したい場合に便利です。
ファイルごとにlaunch.jsonを書き換えなくても、開いているPythonファイルをすぐにデバッグできます。
一方で、設定ファイルやメモ用ファイルを開いたままF5キーを押すと、意図しないファイルが選ばれる点には注意が必要です。
launch.json、README.md、JSONファイル、テキストファイルなどを開いている場合も、${file}はそのファイルのパスへ置き換えられます。
デバッグ構成がPython用であっても、${file}が指しているファイルまで自動的に.pyへ限定されるとは限りません。
VSCodeが壊れているわけではなく、指定どおりに現在のファイルをPythonデバッガーへ渡している状態です。
この仕組みを知っていると、F5キーを押す前にアクティブタブを見る習慣を付けられます。
invalid characterが表示されるまでの流れ
まず、引数や実行対象を変更するためにlaunch.jsonを開きます。
次に、「program」が「${file}」のままF5キーを押します。
VSCodeは「${file}」を現在開いているlaunch.jsonのパスへ置き換えます。
Pythonデバッガーは、そのパスを起動対象として受け取ります。
Pythonはlaunch.jsonをPythonコードとして解析しようとします。
launch.jsonには、波かっこ、コロン、ダブルクォーテーション、コメントなどが含まれています。
これらはJSON形式やJSON with Comments形式の設定としては正しくても、Pythonコードとして正しいとは限りません。
日本語コメントに句点が含まれていると、Pythonはその文字を解釈できず、「SyntaxError: invalid character(U+3002)」のようなエラーで停止します。
句点が最初に検出されたため、画面上では句点が原因のように見えます。
しかし、句点だけを削除してもlaunch.json全体はPythonコードではありません。
次は波かっこや別の文字の位置で、別の構文エラーが発生する可能性があります。
根本的な解決は、launch.jsonの文字を直すことではなく、実行対象をPythonファイルへ戻すことです。
この違いを理解しておくと、不必要に設定ファイルを編集せずに済みます。
すぐ直す方法:実行したいPythonファイルを開いてF5を押す
設定を変更せずにすぐデバッグを再開したい場合は、実行したいPythonファイルをアクティブにしてからF5キーを押します。
この方法は手軽ですが、実行前に毎回タブを確認する必要があります。
作業を止めずに元のデバッグへ戻したい場合は、最初にこの方法を試してください。
アクティブタブを切り替えて実行する手順
最初に、エクスプローラーから実行したい「.py」ファイルを開きます。
main.pyやpdf_to_jpg.pyなど、今回デバッグしたいコードが中央のエディターに表示されていることを確認します。
launch.jsonのタブを閉じる必要はありませんが、Pythonファイルのタブをクリックしてアクティブにしてください。
複数のエディターを左右に分割している場合は、カーソルがどちらのファイルにあるかも確認します。
見た目ではPythonファイルが表示されていても、最後に操作した側がlaunch.jsonなら、意図しないファイルがアクティブになっていることがあります。
次に、画面左側の「実行とデバッグ」を開きます。
画面上部で「Python Debugger: Current File」など、現在のファイルを実行する構成が選ばれているか確認します。
構成名が複数ある場合は、今回使う構成を選択します。
その状態でF5キーを押します。
ブレークポイントで停止するか、統合ターミナルに想定した出力が表示されれば確認完了です。
同じエラーが出る場合は、再度トレースバックの対象ファイルを確認してください。
対象が.pyへ変わっているなら、実行対象の問題は解消しており、Pythonコード側の別エラーへ進んだと判断できます。
対象がlaunch.jsonのままなら、選択中のデバッグ構成が別の設定になっている可能性があります。
この方法が向いているケースと注意点
Pythonファイルを開いてからF5キーを押す方法は、複数のスクリプトを頻繁に切り替えて実行する人に向いています。
練習用の短いコードや、1ファイルで完結するツールを複数扱う場合にも便利です。
launch.jsonを変更しないため、既存のデバッグ設定へ影響を与えにくい点もメリットです。
一方で、毎回同じmain.pyを起動するプロジェクトでは、タブの選択を間違えるたびに同じ問題が再発します。
デバッグ前にREADMEや設定ファイルを確認する作業が多いと、どのファイルがアクティブなのか分かりにくくなります。
チーム開発では、メンバーによってF5キーを押す前の画面状態が異なるため、動作が安定しないこともあります。
手軽な方法と固定方式の違いは次のとおりです。
| 比較項目 | Pythonファイルを開く方法 | 起動ファイルを固定する方法 |
|---|---|---|
| 設定変更 | 不要 | 必要 |
| 実行対象 | アクティブファイル | 指定したファイル |
| 柔軟性 | 高い | 低め |
| 誤操作 | タブ選択に左右される | 比較的少ない |
| 複数ファイルへの対応 | 切り替えやすい | 構成追加が必要 |
| チームでの再現性 | 操作に左右されやすい | 統一しやすい |
| 向いている用途 | 単体スクリプトの切り替え | メインファイルが決まったプロジェクト |
まず作業を再開するだけならPythonファイルを開く方法を使い、再発を防ぎたい場合は固定方式を検討してください。
一度だけ起きた操作ミスであれば、必ずしもlaunch.jsonを書き換える必要はありません。
同じ問題が繰り返し起きているなら、次の固定方式が有効です。
再発を防ぐ方法:programに起動ファイルを固定する
毎回同じメインプログラムをデバッグするなら、launch.jsonの「program」に起動ファイルを固定すると再発を防ぎやすくなります。
この方法では、どのタブを開いていても指定したPythonファイルが起動します。
設定変更後は、実際に別のタブを開いた状態で動作を確認しておきましょう。
修正前:”program”: “${file}”
現在のファイルを実行する設定は、launch.json内で次のように表されます。
- program:”${file}”
この状態では、main.pyを開いていればmain.pyが実行されます。
launch.jsonを開いていればlaunch.jsonが実行対象になります。
複数のPythonファイルを切り替える用途では便利ですが、プロジェクトの入口が常に同じ場合は誤操作の原因になりやすい設定です。
たとえば、Webアプリケーション、バッチ処理、変換ツールなどでは、処理を開始するファイルが決まっていることがあります。
そのようなプロジェクトで毎回${file}を使うと、補助モジュールを開いたままF5キーを押した際に、想定と異なる処理が実行される可能性があります。
補助モジュールは単体実行を想定していないため、相対インポートのエラーや必要な引数の不足が発生することもあります。
つまり、${file}方式の注意点はlaunch.jsonを実行してしまうことだけではありません。
プロジェクト全体の入口ではないPythonファイルを誤って実行する可能性もあります。
修正後:${workspaceFolder}から起動ファイルを指定する
「${workspaceFolder}」は、VSCodeで開いているワークスペースフォルダーのパスを表す変数です。
プロジェクト直下にpdf_to_jpg.pyがある場合は、次のように指定します。
- program:”${workspaceFolder}/pdf_to_jpg.py”
srcフォルダー内にmain.pyがある場合は、次のように指定します。
- program:”${workspaceFolder}/src/main.py”
この書き方なら、プロジェクトを保存している場所が変わっても、ワークスペースを基準にファイルを探せます。
PCごとにユーザー名やドライブ名が異なる場合でも、絶対パスを直接書くより共有しやすくなります。
ただし、${workspaceFolder}はVSCodeで開いているフォルダーを基準にします。
プロジェクトフォルダーではなく、その1つ上や下のフォルダーを開いていると、組み立てられるパスがずれます。
デバッグ構成で確認したい主な項目は次のとおりです。
- name:一覧に表示する構成名
- type:Pythonデバッガーの種類
- request:新しく起動する場合は「launch」
- program:起動するPythonファイル
- console:出力先
- args:Pythonプログラムへ渡す引数
- cwd:実行時の基準フォルダー
- env:必要に応じて渡す環境変数
programだけを直せばよいケースが多いですが、相対パスを使うプログラムではcwdの影響も受けます。
Pythonコード内で「input/sample.pdf」のような相対パスを使っている場合は、どのフォルダーを基準に探しているかも確認してください。
修正後の動作を確認する
設定を保存したら、あえてlaunch.jsonのタブを開いた状態にします。
画面上部のデバッグ構成で、修正した構成が選択されていることを確認します。
その状態でF5キーを押します。
指定したmain.pyやpdf_to_jpg.pyが起動すれば、programの固定は成功しています。
次に、README.mdや別のPythonファイルを開いた状態でもF5キーを押します。
どのタブから実行しても同じメインプログラムが起動すれば、アクティブファイルに依存しない設定になっています。
変更してもlaunch.jsonが実行される場合は、別のデバッグ構成を選んでいる可能性があります。
launch.json内に複数の「configurations」があるときは、編集した項目が現在選択中の構成に含まれているかを確認してください。
構成名が似ている場合は、「メインプログラム固定」など役割が分かる名前へ変更すると選択ミスを減らせます。
また、launch.jsonを保存していない状態では、修正内容が反映されない可能性があります。
タブ名に未保存を示す印が残っていないかも確認してください。
${file}・固定方式・複数構成の選び方
単体スクリプトをその都度切り替えるなら、「${file}」方式が使いやすいです。
毎回同じmain.pyから処理を始めるなら、起動ファイルを固定する方式が向いています。
複数のメインプログラムを使い分けるなら、「configurations」に複数の構成を登録できます。
たとえば「PDF変換」「画像変換」「テスト用」「現在のファイル」のように役割ごとの構成名を付けます。
それぞれの構成で異なる「program」と「args」を指定し、F5キーを押す前に一覧から選択します。
複数構成は柔軟ですが、名前が似ていると選択を間違えやすい点がデメリットです。
使用頻度の低い構成まで増やすと、一覧が分かりにくくなります。
普段使う構成を2個から4個程度に整理し、名前だけで用途が分かるようにしておくと扱いやすくなります。
判断の目安は次のとおりです。
- 小さな.pyファイルを頻繁に切り替える場合は${file}
- 常に同じmain.pyを起動する場合は固定方式
- 起動ファイルや引数が複数ある場合は複数構成
- チームで同じ動作を再現したい場合は固定方式または複数構成
- 一時的な検証を素早く行いたい場合は${file}
どれか1つが常に正解というわけではありません。
作業の流れと誤操作の起きやすさを基準に選ぶことが重要です。
argsで日本語名や空白入りパスを渡す方法
programを正しく設定しても、argsの書き方が不適切だと、ファイルが見つからないなどの別エラーが発生します。
日本語名や空白を含むパスでは、1つの引数を1つの配列要素として指定することが重要です。
実行対象の問題と引数の問題を混同しないように、エラーの内容を分けて確認してください。
argsは1つの引数を1つの要素として書く
launch.jsonの「args」は、Pythonプログラムへ渡すコマンドライン引数を配列で指定します。
入力ファイルと出力フォルダーを渡すなら、オプション名と値をそれぞれ別の文字列として記述します。
- 1つ目の要素:”–input”
- 2つ目の要素:”C:\\Develop\\Python\\pdf2jpg\\サンプル 資料.pdf”
- 3つ目の要素:”–output”
- 4つ目の要素:”C:\\Develop\\Python\\pdf2jpg\\変換結果”
「サンプル 資料.pdf」の途中には空白がありますが、パス全体が1つの文字列要素なら、1つの引数として渡されます。
反対に、空白の前後で別々の要素へ分けると、Python側では複数の引数として受け取ります。
引数の区切りは文字列内の空白ではなく、args配列の要素で決まると考えると分かりやすくなります。
| 渡したい内容 | argsの要素 |
|---|---|
| オプション名 | “–input” |
| 入力ファイル | “C:\\Develop\\Python\\pdf2jpg\\サンプル 資料.pdf” |
| オプション名 | “–output” |
| 出力フォルダー | “C:\\Develop\\Python\\pdf2jpg\\変換結果” |
コマンドプロンプトで実行する場合は、空白を含むパスを引用符で囲むことがあります。
launch.jsonでは、配列の各要素自体が文字列として記述されているため、さらに引用符を文字列の中へ追加する必要がないケースが一般的です。
余分な引用符まで引数として渡すと、Python側でパスの先頭や末尾に「”」が含まれた状態になる可能性があります。
設定後は、Python側で実際に受け取った値を表示して確認すると確実です。
Windowsパスのバックスラッシュに注意する
Windowsのパスでは、フォルダーの区切りにバックスラッシュを使います。
JSON文字列内のバックスラッシュは、特殊文字を表すエスケープ文字として扱われます。
そのため、固定したWindowsパスを直接書く場合は、「\」を「\\」のように重ねて記述します。
「C:\Develop\Python\pdf2jpg\サンプル 資料.pdf」は、JSON上では「C:\\Develop\\Python\\pdf2jpg\\サンプル 資料.pdf」のように表します。
「\n」などの並びは改行を表す特殊な文字として解釈されるため、そのまま書くと想定外の値になることがあります。
ワークスペース内のファイルなら、「${workspaceFolder}/input/サンプル 資料.pdf」のように変数とスラッシュを組み合わせる方法も分かりやすいです。
この方法ではPC固有のドライブ名やユーザー名を書かずに済みます。
ただし、「${workspaceFolder}」を使う場合は、PythonファイルだけでなくプロジェクトフォルダーをVSCodeで開いてください。
単一のPythonファイルだけを直接開いている状態では、想定したワークスペースフォルダーが設定されていない場合があります。
また、日本語のファイル名自体が必ず問題になるわけではありません。
パスが正しく1つの引数として渡され、Pythonや利用中のライブラリがその文字列を扱えれば、日本語を含むファイルも処理できます。
問題が起きた場合は、日本語だけを疑うのではなく、パスの存在、エスケープ、引数の分割を順番に確認してください。
Python側で受け取った引数を確認する
引数の指定が正しいか分からない場合は、Python側で受け取った内容を表示すると切り分けやすくなります。
簡単な確認では、標準ライブラリのsys.argvを使えます。
sys.argvの先頭要素には実行したPythonファイルのパスが入り、それ以降にargsで指定した値が順番に入ります。
入力ファイルのパスが途中で分割されず、1つの要素として表示されているかを確認してください。
想定では1つのパスなのに、空白の前後で2つの要素へ分かれている場合は、argsの指定方法を見直します。
先頭や末尾に余分な引用符が表示されている場合は、文字列内へ不要な引用符を入れていないか確認します。
「unrecognized arguments」と表示される場合は、argparse側で定義していないオプションを渡していないかを見直します。
オプション名のハイフン数やスペルも確認してください。
「FileNotFoundError」が出る場合は、引数の分割だけでなく、ファイルの存在、拡張子、相対パスの基準も確認してください。
エクスプローラー上で見えている名前と、実際のファイル名が完全に一致しているかも重要です。
Windowsで拡張子が非表示になっていると、「sample.pdf.pdf」のような名前になっていることがあります。
まずsys.argvで受け取った値を確認し、その後にファイルの存在を確認すると、原因を段階的に絞り込めます。
設定を変えても直らない時の確認ポイント
programを変更しても直らない場合は、デバッグ構成、Pythonファイル、launch.jsonの順に確認します。
原因を絞り込まずにVSCodeやPythonを再インストールするより、トレースバックと設定を一つずつ確認するほうが効率的です。
設定変更後に別のエラーへ変わった場合は、修正が一部進んでいる可能性もあります。
選択中のデバッグ構成を確認する
launch.jsonには複数のデバッグ構成を登録できます。
programを修正したのに挙動が変わらない場合は、編集した構成とは別の構成が選択されている可能性があります。
「実行とデバッグ」画面の上部にある構成名を確認してください。
現在選択されている構成の「name」と、launch.json内で編集した構成の「name」が一致しているかを見ます。
構成名が「Python Debugger: Current File」のままなら、${file}を使う別構成が選ばれている可能性があります。
Python用の構成では「type」がPythonデバッガー用の設定になっているかも確認します。
「request」が「attach」の構成は、すでに動いているプロセスへ接続する用途のため、今回の固定方法とは動作が異なります。
複数のワークスペースを開いている場合は、別プロジェクトのlaunch.jsonを編集していないかも確認してください。
似た名前のフォルダーを複数開いていると、どの設定が使われているのか分かりにくくなります。
デバッグ構成の一覧から選択した後に、もう一度F5キーを押して挙動を確認します。
トレースバックが.pyファイルを指す場合
トレースバックが目的のPythonファイルを指しているなら、実行対象は正しく切り替わっています。
その場合は、エラー行に全角の記号が入っていないかを確認します。
特に、全角の「:」「(」「)」「,」「.」や装飾用の引用符は、見た目だけでは気づきにくいことがあります。
Webページからコピーしたコードでは、半角の引用符が別の文字へ置き換わる場合があります。
コメント内の全角文字は通常問題になりませんが、コードとして解釈される位置に全角記号が入るとエラーになる可能性があります。
エラー行を手入力し直す方法や、一時的にコメントアウトして変化を見る方法も切り分けに使えます。
表示された行だけでなく、直前の行に引用符やかっこの閉じ忘れがないかも確認してください。
複数行の文字列を使っている場合は、開始と終了の引用符がそろっているかを確認します。
インデントが崩れている場合は、SyntaxErrorではなくIndentationErrorとして表示されることもあります。
エラー名が変わった場合は、新しいエラー内容を基準に調べ直してください。
launch.jsonを修正した後も古いエラー画面を見続けると、現在の状態と混同しやすくなります。
launch.jsonの構文とファイルパスを確認する
デバッグ開始前に設定エラーが表示される場合は、launch.jsonの構文を確認します。
ダブルクォーテーションの閉じ忘れ、カンマの不足、余分な波かっこがないかを見直してください。
VSCode上で赤い波線が表示されている場合は、その位置へカーソルを合わせると問題の内容を確認できることがあります。
programに指定したファイルが実際に存在するかも確認します。
ファイル名、拡張子、フォルダー階層、全角と半角の違いを見直します。
「${workspaceFolder}」を使う場合は、どのフォルダーをVSCodeで開いているかが重要です。
想定より上や下のフォルダーを開いていると、組み立てられたパスがずれます。
たとえば、programを「${workspaceFolder}/src/main.py」と指定しているなら、開いているワークスペース直下にsrcフォルダーが必要です。
実際には「project/project/src/main.py」のような階層になっていないかを確認してください。
ターミナルから対象のPythonファイルを直接実行すると、プログラム側とデバッグ設定側の問題を分けやすくなります。
ターミナルでは動くのにF5デバッグだけ失敗するなら、launch.jsonや選択中のPython環境を重点的に確認します。
ターミナルでも失敗するなら、Pythonコード、引数、ファイルパスなどの問題である可能性が高くなります。
Python環境と実行場所も確認する
programとlaunch.jsonに問題がなくても、選択されているPython環境が想定と違う場合があります。
画面下部やコマンドパレットから、使用中のPythonインタープリターを確認してください。
必要なライブラリを仮想環境へインストールしているのに、別のPythonが選ばれているとModuleNotFoundErrorが発生します。
このエラーはlaunch.jsonの誤実行とは異なりますが、programを直した直後に表面化することがあります。
また、相対パスを使う処理では、実行時のカレントディレクトリも重要です。
必要に応じてlaunch.jsonのcwdを確認し、プログラムが想定するフォルダーと一致させます。
エラーが変わったからといって修正が失敗したとは限りません。
launch.jsonの誤実行が解消され、次に本来のPythonプログラム内の問題が表示された可能性があります。
よくある質問
ここでは、launch.jsonの実行対象を修正するときに迷いやすい点をまとめます。
自分のプロジェクトに合う設定を選ぶための判断材料として確認してください。
${file}は使わないほうがよい?
「${file}」は危険な設定ではなく、現在のファイルをすぐにデバッグするための便利な変数です。
複数の小さなPythonスクリプトを切り替える場合は、起動ファイルを固定するより使いやすいことがあります。
学習中にsample01.py、sample02.py、sample03.pyを順番に試すような用途にも向いています。
問題になるのは、Python以外のファイルを開いていることに気づかず、そのままF5キーを押すケースです。
同じmain.pyだけを繰り返し実行するなら、固定方式のほうが操作ミスを減らしやすくなります。
${file}を使い続ける場合は、デバッグ開始前にタブ名を見る習慣を付けると再発を防げます。
設定ファイルを編集した直後は、Pythonファイルへ戻ってからF5キーを押すようにしてください。
複数のメインプログラムを登録できる?
launch.jsonの「configurations」配列には、複数のデバッグ構成を登録できます。
各構成に異なる「name」「program」「args」を設定すると、処理ごとの起動方法を一覧から選べます。
「PDF変換」「画像変換」「テスト用」「現在のファイル」のように、実行対象が分かる名前にすると選択ミスを防ぎやすくなります。
入力ファイルや出力先が違うだけなら、programを共通にしてargsだけ変える構成も作れます。
本番に近い設定とテスト用設定を分けておくと、毎回argsを書き換える手間を減らせます。
ただし、設定が増えすぎると管理しにくくなります。
似た構成を大量に作るより、用途ごとに整理して必要なものだけ残すことが大切です。
launch.jsonを削除して作り直してもよい?
launch.jsonの内容が複雑になり、どの設定が使われているか分からない場合は、作り直すことで整理できることがあります。
ただし、削除する前に現在のファイルをコピーして保存してください。
独自のargs、環境変数、作業ディレクトリ、複数構成が含まれていると、同じ設定を再現できない可能性があります。
チームで共有しているプロジェクトでは、自分だけの判断で削除すると他のメンバーの作業へ影響することもあります。
単にlaunch.jsonを開いたままF5キーを押しただけなら、ファイルを削除する必要はありません。
まず「program」と選択中の構成を確認し、それでも整理できない場合に再生成を検討してください。
再生成後は、以前使っていたargsやcwdが失われていないかも確認します。
launch.jsonの日本語コメントは削除したほうがよい?
launch.json内の日本語コメントが、通常のデバッグ設定として使われているだけなら、必ず削除する必要はありません。
今回のエラーでは、日本語コメントが原因というより、launch.jsonをPythonコードとして実行したことが問題です。
日本語の句点を削除すると、その位置のエラーだけは変わる可能性があります。
しかし、実行対象がlaunch.jsonのままなら、別の位置で構文エラーが発生します。
コメントを消すより、programが何を指しているかを確認してください。
F5キーと右上の実行ボタンは同じ動作?
VSCodeでは、操作したボタンや選択している機能によって、実行方法が異なることがあります。
F5キーは通常、選択中のデバッグ構成を使ってデバッグを開始します。
右上の実行ボタンは、現在のPythonファイルを直接実行する動作になる場合があります。
そのため、右上のボタンでは動くのにF5キーでは失敗するケースがあります。
この場合はPythonコードそのものより、launch.jsonやデバッグ構成を確認する価値があります。
どの方法で実行したかを覚えておくと、原因を切り分けやすくなります。
まとめ:トレースバックとprogram設定を確認しよう
VSCodeのF5デバッグでlaunch.jsonがPythonとして実行された場合は、エラー名だけでなくトレースバックの対象ファイルを確認することが解決への近道です。
すぐ直す方法と再発を防ぐ方法を、普段の使い方に合わせて選びましょう。
エラー画面の文字を一つずつ消す前に、どのファイルを実行しようとしているのかを見ることが重要です。
最初に確認するポイント
「SyntaxError: invalid character」と表示されたら、最初にトレースバックがどのファイルを指しているか確認します。
「.vscode/launch.json」が表示されていれば、「program」が「${file}」になっていないかを見ます。
F5キーを押したときにlaunch.jsonのタブを開いていたなら、アクティブファイルが実行対象になった可能性があります。
一時的に直すなら、実行したいPythonファイルのタブを開いてからF5キーを押します。
エラー行の句点だけを削除しても、実行対象がlaunch.jsonのままでは根本的な解決になりません。
トレースバックが.pyファイルを指している場合は、全角記号、引用符、不可視文字、直前の構文などを確認します。
同じエラー名でも、対象ファイルによって調べる場所が変わります。
用途に合った実行対象の指定方法を選ぶ
複数の単体スクリプトを切り替えるなら、「${file}」方式が便利です。
毎回同じメインプログラムを起動するなら、「${workspaceFolder}/main.py」のようにprogramを固定する方式が向いています。
複数の起動方法が必要なら、用途ごとにデバッグ構成を登録します。
設定変更後は、launch.jsonやREADMEを開いた状態でも、指定したPythonファイルが起動するか確認してください。
argsへ日本語名や空白を含むパスを渡す場合は、パス全体を1つの配列要素として指定します。
Windowsの固定パスをJSONへ直接書く場合は、バックスラッシュのエスケープにも注意します。
設定を変えても直らない場合は、選択中の構成、programのパス、Pythonファイルの構文、実行環境の順に確認します。
今回のエラーは、VSCodeやPythonを再インストールしなくても、実行対象とデバッグ構成を確認するだけで解決できるケースがあります。