SyntaxError: '(' was never closed の原因と直し方
丸括弧・角括弧・波括弧の対応が崩れたときに出るエラーです。複数行にまたがる呼び出しや、関数呼び出しの中に別の括弧が入れ子になっている場合に見落としがちです。
エラーメッセージの読み方
File "main.py", line 1
main.py- ファイル名
1- 行番号 — Pythonが構文解析を諦めた位置
SyntaxError- エラークラス — 実行前の構文チェックで検出されました
'(' was never closed- 内容 — 期待していたもの、または見つけられなかったもの
このエラーが出る典型パターン
パターン1
1 print("hello" ^
File "main.py", line 1
print("hello"
^
SyntaxError: '(' was never closed
開いた丸括弧の数だけ閉じる必要があります。複数行にまたがる呼び出しでは特に見落としがちです。
直し方: (空) を ) にします。
広告
広告スロット(未設定)
パターン2
1 total = sum([1, 2, 3] ^ 2 print(total)
File "main.py", line 1
total = sum([1, 2, 3]
^
SyntaxError: '(' was never closed
sum([...])は括弧が二重になっています。角括弧を閉じただけでは、外側の丸括弧はまだ開いたままです。
直し方: (空) を ) にします。
パターン3
1 nums = [1, 2, 3 ^ 2 print(nums)
File "main.py", line 1
nums = [1, 2, 3
^
SyntaxError: '[' was never closed
リストの角括弧も同様です。要素を並べただけでは、どこまでがリストかPythonは判断できません。
直し方: (空) を ] にします。
パターン4
1 data = {"a": 1 ^ 2 print(data)
File "main.py", line 1
data = {"a": 1
^
SyntaxError: '{' was never closed
波括弧の辞書リテラルも同じ規則です。開いた波括弧の数だけ閉じる必要があります。
直し方: (空) を } にします。
パターン5
1 config = {"nums": [1, 2, 3] ^ 2 print(config)
File "main.py", line 1
config = {"nums": [1, 2, 3]
^
SyntaxError: '{' was never closed
内側の角括弧は閉じていても、外側の波括弧が開いたままなら別のエラーになります。
直し方: (空) を } にします。
よくある誤解
エラーの行番号は閉じ忘れた場所ではなく、閉じられていない括弧が開かれた場所を指します。エラー行だけを見ても直せないことがあります。
実務での勘所
開いた括弧の中では改行しても1つの文として扱われる、というPythonの仕様が、複数行にわたる関数呼び出しやリストを書きやすくしている一方で、このエラーの原因にもなっています。括弧を1つ書き忘れると、Pythonはどこまでが「閉じられていない括弧の中」なのか分からなくなり、ファイルの終わりまで読み進めてから初めてエラーを報告することがあります。バックスラッシュによる行継続(\)とは別の仕組みで、括弧の中では行継続の記号すら不要です。