0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Lua言語 主なエラーを一覧にしてみました

Last updated at Posted at 2025-12-15

 Lua言語の、エラーメッセージを一覧にしました。大きく文法エラーと実行時のエラーになると思います。プログラミング初心者が見て、原因やヒント、気づきとなるように、生成AIを使ってまとめてみました。
 内容が重複しているところもありますが、各エラーがわかる簡単なサンプルコードは間違った例、修正例を検証してみてください。最後にPythonのエラーも付記しました。
 OneCompilerのLuaオンラインエディタは標準入力をサポートしており、ユーザーはI/Oタブの「STDIN」テキストボックスを使用してプログラムに入力を与えることができます。検証に使ってみてください。

Luaの代表的なエラーメッセージ一覧と対処法

はじめに

Luaプログラミングでは、エラーメッセージが出たときにその意味を理解し、原因を探り、適切に修正することが大切です。この資料では、初心者がよく遭遇する文法エラーと実行時エラーを取り上げ、それぞれのエラーの原因、ヒント、そして間違い例と修正例を示します。

プログラミング初心者にとって、表示されるエラーメッセージは「怒られた」と感じてしまいがちですが、実は**「ここを直せば動くよ」と教えてくれる親切なヒント**です。

Luaで特によく遭遇するエラーメッセージを、**「何が起きているのか」「どう解決すればいいか」**という視点で分類しました。


1. 「nil(ニル)」に関するエラー

Luaで最も多いのがこれです。nil とは「何もない」「空っぽ」という意味です。変数が空っぽなのに、無理やり何かをしようとした時に発生します。

attempt to index a nil value

  • 直訳: nil 値にインデックス(参照)しようとしました。
  • 初心者のための翻訳: 「その箱(変数)、中身が空っぽですよ! 中身がないのにプロパティや配列の中身を取り出そうとしています。」
  • よくある原因:
    • 変数のスペルミス(定義した名前と違う名前を使っている)。
    • 初期化し忘れ(t = {} とするのを忘れて t.x = 1 と書いた)。
    • 関数の戻り値が nil だったのに、そのまま使おうとした。
  • ヒント:
    • エラーが出た行の変数を print(変数名) して中身を確認してみてください。きっと nil と表示されます。

attempt to call a nil value

  • 直訳: nil 値を呼び出そうとしました。
  • 初心者のための翻訳: 「存在しない関数を使おうとしています。」
  • よくある原因:
    • 関数名のスペルミス(例: prinnt("hello"))。
    • 関数を定義する前に、その関数を呼び出している(Luaは上から順に読み込みます)。
  • ヒント:
    • その関数名、どこかで打ち間違えていませんか?
    • 関数の定義(function ... end)は、呼び出す行よりも「上」にありますか?

attempt to perform arithmetic on a nil value

  • 直訳: nil 値に対して算術演算(計算)を行おうとしました。
  • 初心者のための翻訳: 「空っぽのもの(nil)を使って計算しようとしています。」
  • よくある原因:
    • 数値が入っているはずの変数が、実は nil だった。
    • local a = b + 1 のような計算で、b が未定義だった。

2. 文法(書き方)のエラー

コードの書き方のルール違反です。これが出るとプログラムは一行も実行されずに止まります。

'end' expected (to close 'function' at line X)

  • 直訳: 行Xの function を閉じるための end が必要です。
  • 初心者のための翻訳: 「始まり(ifやfunction)はあるけど、終わり(end)が見当たりません。」
  • よくある原因:
    • ifforfunction の最後につける end の書き忘れ。
    • end の数が合っていない(入れ子構造の時によく起きます)。
  • ヒント:
    • 注意: エラーメッセージに出ている行番号は「ファイルの最後」を指していることが多いです。実際の書き忘れ箇所はずっと「上」にあります。インデント(字下げ)を整えて確認してみましょう。

unexpected symbol near '...'

  • 直訳: '...' の近くに予期しない記号があります。
  • 初心者のための翻訳: 「ここにこの記号があるのはおかしいです。書き間違いじゃないですか?」
  • よくある原因:
    • 全角スペースが混じっている(最強の敵です)。
    • if a == 1 thenthen を忘れている。
    • 変数の代入に == (比較)を使っている、またはその逆。

attempt to call global '...' (a nil value)

  • 直訳: グローバル変数 '...' (nil値) を呼び出そうとしました。
  • 初心者のための翻訳: 「そんな名前の関数や変数は、どこにも見当たりません。」
  • よくある原因:
    • 標準ライブラリの使い間違い(例: string.formatString.format と大文字で書いた)。Luaは大文字と小文字を区別します。

3. 型(Type)の間違い

「文字」と「数字」など、合わないもの同士を組み合わせようとした時のエラーです。

attempt to perform arithmetic on a string value

  • 直訳: 文字列に対して算術演算を行おうとしました。
  • 初心者のための翻訳: 「文字を使って計算しようとしています(計算できる文字ではありません)。」
  • 補足: Luaは "10" + 1 のように数字に見える文字列は自動で計算してくれますが、 "hello" + 1 はエラーになります。
  • ヒント:
    • 入力されたデータがちゃんと数字になっているか確認しましょう。tonumber() 関数が役立ちます。

attempt to concatenate a ... value

  • 直訳: ... 値を連結しようとしました。
  • 初心者のための翻訳: 「文字列結合(..)を使っていますが、文字じゃないもの(テーブルやブーリアンなど)をつなごうとしています。」
  • よくある原因:
    • print("Score: " .. score) と書いたが、score が数値ではなく tabletrue/false だった。
  • ヒント:
    • tostring(変数) を使って、強制的に文字に変換してから結合してみてください。

4. 初心者がハマりやすい「エラーが出ない」バグ

エラーメッセージが出ればラッキーですが、**「エラーは出ないけど動かない」**のが一番厄介です。

変数のスコープ(範囲)問題

  • 現象: 変数の値が変わらない、関数の中で計算した結果が外に反映されない。
  • 原因: local をつけ忘れてグローバル変数になってしまっている、あるいは意図せず同じ名前の local 変数を作ってしまっている。
  • アドバイス: 基本的に変数はすべて local をつけて定義しましょう。バグが減ります。

トラブルシューティングのコツ

エラーが出たときは、以下の手順で冷静に対処しましょう。

  1. 行番号を見る: エラーメッセージの最後に :15 のような数字があります。まずはその行(またはその直前の行)を見ます。
  2. 英語を恐れない: nil があれば「空っぽなんだな」、expected があれば「何かが足りないんだな」と推測します。
  3. printデバッグ: エラーが出ている行の直前で print("ここまで来た", 変数名) と書いて実行してみます。どこで止まっているか、変身の中身は何かが見えます。

エラーはプログラミングの上達に欠かせない「先生」のようなものです。一つずつ解決していくことで、必ず書けるようになります。


文法エラーの例

1. 「<eof>」エラー(予期しないファイルの終わり)

(Unexpected end of file error)

  • 原因 (Cause):
    文の終わりが正しく閉じられていない(例:括弧や文字列の閉じ忘れ)
    (The statement is not properly closed, such as missing closing parentheses or quotation marks.)

  • ヒント (Hint):
    開いた括弧や引用符は必ず閉じる
    (Always close opened parentheses and quotation marks.)

間違い例 (Incorrect example)

print("Hello World
Output:
lua5.4: Main.lua:1: ')' expected near <eof>

修正例 (Corrected example)

print("Hello World")

2. 「unexpected symbol」エラー(予期しない記号)

  • 原因: 文法にない記号が使われている、またはスペルミス
  • ヒント: 記号の使い方や変数名のスペルを確認

間違い例

local num = 10@
Output:
lua5.4: Main.lua:1: unexpected symbol near '@'

修正例

local num = 10

3. 「‘end’ expected」エラー(endが足りない)

  • 原因: if文や関数の終わりにendを書き忘れている
  • ヒント: ブロックの開始に対して必ずendが必要

間違い例

if num > 5 then
  print("Greater than 5")
-- end がない
Output:
lua5.4: Main.lua:3: 'end' expected (to close 'if' at line 1) near <eof>

修正例

num = 7
if num > 5 then
  print("Greater than 5")
end

実行時エラーの例

1. 「attempt to call a nil value」エラー(nil値を関数として呼び出そうとした)

  • 原因: 関数名のスペルミスや、関数が定義されていない
  • ヒント: 変数や関数名を正しく確認

間違い例

pritn("Hello")
lua5.4: Main.lua:1: attempt to call a nil value (global 'pritn')
stack traceback:
	Main.lua:1: in main chunk
	[C]: in ?

修正例

print("Hello")

2. 「attempt to index a nil value」エラー(nil値のフィールドアクセス)

  • 原因: テーブルや変数がnilの状態でフィールドを参照しようとした
  • ヒント: 変数が正しく初期化されているか確認

間違い例

local t = nil
print(t.name)
Output:
lua5.4: Main.lua:2: attempt to index a nil value (local 't')
stack traceback:
	Main.lua:2: in main chunk
	[C]: in ?

修正例

local t = {name = "Lua"}
print(t.name) ---Lua

3. 「number expected」エラー(数値が期待されているのに違う型)

  • 原因: 数値演算に文字列など違う型の値を使った
  • ヒント: 型を確認し、数値変換が必要なら行う
    Lua 5.3以降:自動変換されます。

間違い例 **古いLuaバージョン(Lua 5.2以前)**の動作でエラーが出ていました。

local x = "10"
print(x + 5)  ---15 半角数字の文字列は、計算します。間違いではないです。

修正例

local x = "10"
print(tonumber(x) + 5)  ---15

変換できない文字列はエラー attempt to add a 'string' with a 'number'

-- これらはエラーになる
print("hello" + 5)           -- エラー
print("abc" * 2)             -- エラー
print("10x" + 5)             -- エラー(数値として解釈できない)
lua5.4: Main.lua:2: attempt to add a 'string' with a 'number'

学びのポイント

  • エラーメッセージは原因を示すヒント
    まずはメッセージをよく読み、どの部分で何が問題かを考えましょう。

  • 文法エラーはコードの構造のミス
    括弧の閉じ忘れやendの書き忘れ、記号の誤用が多いです。

  • 実行時エラーはプログラムの動作中の問題
    変数の値がnilだったり、型が合わなかったりすることが原因です。

  • デバッグ力を鍛えよう
    エラーが出たら、コードのどこが原因かを推測し、間違い例と修正例を参考に直してみましょう。

  • エラーは成長のチャンス
    エラーに慣れていくことが上達の近道です。恐れずに挑戦してください。

Luaの代表的なエラーメッセージ一覧と対処法

以下、Luaでよく遭遇するエラーメッセージを「文法エラー(コンパイル時)」と「実行時エラー」に分け、初心者向けの原因・ヒント、間違った例と修正例をご紹介します。

―――――――― ■ 文法エラー(Syntax Error) ――――――――

1. “unexpected symbol near ‘=’”

・原因/ヒント:Luaは行末のセミコロンや波かっこを使わず、書き方が違うと解釈できません。
・間違い例:

  local x == 10 

・修正例:

  local x = 10  

2. “‘then’ expected near ‘print’”

・原因/ヒント:if文を書いたら、条件式のあとに必ず then が必要。
・間違い例:

  if x > 0  
    print("positive")  
  end

・修正例:

  x = 1
  if x > 0 then  
    print("positive")  
  end  

3. “unfinished long string (starting at line X)”

・原因/ヒント:長い文字列を [[ で開始したら、対応する ]] で閉じる必要あり。
・間違い例:(閉じる ]] がない)

  local s = [[This is a  
  multiline string  

・修正例:

  local s = [[This is a  
  multiline string]]  

4. “‘function’ expected near ‘name’”

・原因/ヒント:関数定義のキーワードや構文が間違っている場合に出る。
・間違い例:helloの後に()が抜けてます。

function hello 
 print("Hi, " .. name)  
end 
Output:
lua5.4: Main.lua:2: '(' expected near 'print'

・間違い例:functionが抜けてます。

 hello(name) 
  print("Hi, " .. name)  
 end 
Output:
lua5.4: Main.lua:3: <eof> expected near 'end'

・修正例:

  function hello(name)  
    print("Hi, " .. name)  
  end  

5. “unexpected symbol near ‘end’”

・原因/ヒント:end が余計、あるいは対応する if/function がない。
・間違い例:

  print("test")  
  end

・修正例:

  print("test")  
  -- end は削除  

―――――――― ■ 実行時エラー(Runtime Error) ――――――――

1. “attempt to call global ‘foo’ (a nil value)”

・原因/ヒント:関数 foo を呼び出しているが、まだ定義していない、あるいは変数上書きで消えている。
・間違い例:

  foo()  
  function foo() print("Hi") end 

・修正例:

  function foo() print("Hi") end  
  foo()

2. “attempt to index a nil value (field ‘x’)”

・原因/ヒント:テーブル t が nil のまま t.x にアクセスしようとした。
・間違い例:

  local t  
  print(t.x) 

・修正例:

  local t = {}  
  print(t.x)   -- nil だけどエラーにはならない

3. “bad argument #1 to ‘ipairs’ (table expected, got nil)”

・原因/ヒント:ipairs に渡す値がテーブルではない。
・間違い例:

  local list  
  for i,v in ipairs(list) do print(v) end
Output:
lua5.4: attempt to index a nil value
stack traceback:
 [C]: in for iterator 'for iterator'
 Main.lua:2: in main chunk
 [C]: in ?

・修正例:

  local list = {"a","b","c"}  
  for i,v in ipairs(list) do print(v) end  

4. “attempt to perform arithmetic on a string value”

・原因/ヒント:“5”のような文字列に対して + や - を使った。
・間違い例:Lua 5.2以前:エラーになる。Lua 5.3以降:自動変換される

-- Lua 5.2以前
  local a = "10" + 5 
-- エラー: attempt to perform arithmetic on a string value

・修正例:

  local a = tonumber("10") + 5  

5.attempt to concatenate a nil value (local 'name')

・原因/ヒント:関数の引数忘れ
・間違い例:

function hello(name)  
 print("Hi, " .. name)  
end  

hello() --関数の引数忘れ

・修正例:

function hello(name)  
 print("Hi, " .. name)  
end  

hello("yoko") --Hi, yoko  

――――――――

以上の例を参考に、エラーメッセージに示される行番号やキーワードをヒントに原因を探し、サンプルのように書き直してみてください。慣れてくると、エラーが出た瞬間に「何が足りないのか」「型が違うのか」がだんだん分かるようになります。ぜひ手を動かして試してみてください!


Luaの代表的なエラーメッセージとよくあるケースを一覧にまとめます。

Lua 代表的なエラーメッセージ一覧

1. 比較・演算関連のエラー

attempt to compare number with nil

-- エラーケース
if x > 5 then end  -- xが未定義

-- 正しい例
local x = 10
if x > 5 then end

attempt to perform arithmetic on a nil value

-- エラーケース
local result = x + 5  -- xが未定義

-- 正しい例
local x = 10
local result = x + 5

attempt to perform arithmetic on a string value

Lua 5.2以前:エラーになる。Lua 5.3以降:自動変換される。

-- エラーケース
local x = "10"
local result = x + 5  -- 文字列と数値の演算

-- 正しい例
local x = 10  -- または tonumber("10")
local result = x + 5

2. 関数呼び出し関連のエラー

attempt to call a nil value

-- エラーケース1: 関数が未定義
myFunction()  -- myFunctionが存在しない

-- エラーケース2: typo(タイプミス)
math.sine(1.5)  -- 正しくは math.sin

-- 正しい例
function myFunction()
  print("Hello")
end
myFunction()

attempt to call a number value

-- エラーケース
local x = 5
x()  -- 数値を関数として呼び出そうとした

-- 正しい例
local x = function() return 5 end
x()

3. テーブル(Table)関連のエラー

attempt to index a nil value

-- エラーケース1: テーブルが未定義
print(myTable.key)  -- myTableが存在しない

-- エラーケース2: ネストしたテーブル
local t = {}
print(t.a.b)  -- t.aがnilなのにさらに.bにアクセス

-- 正しい例
local myTable = {key = "value"}
print(myTable.key)

attempt to index a number value

-- エラーケース
local x = 5
print(x.field)  -- 数値をテーブルとして扱おうとした

-- 正しい例
local x = {field = 10}
print(x.field)

4. 文字列連結関連のエラー

attempt to concatenate a nil value

-- エラーケース
local name
print("Hello " .. name)  -- nameがnil

-- 正しい例
local name = "Taro"
print("Hello " .. name)

attempt to concatenate a table value

-- エラーケース
local t = {1, 2, 3}
print("Data: " .. t)  -- テーブルを直接連結できない

-- 正しい例
print("Data: " .. table.concat(t, ", "))

5. 構文エラー

')' expected near 'end'

-- エラーケース
function test(a, b
  return a + b
end

-- 正しい例
function test(a, b)
  return a + b
end

'end' expected near <eof>

-- エラーケース
if x > 5 then
  print("big")
-- endが足りない

-- 正しい例
if x > 5 then
  print("big")
end

'then' expected near 'do'

-- エラーケース
if x > 5 do  -- thenを忘れた
  print("big")
end

-- 正しい例
if x > 5 then
  print("big")
end

unexpected symbol near '='

-- エラーケース1: ==の代わりに=を使用
if x = 5 then  -- 比較は == を使う
  print("five")
end

-- エラーケース2: 予約語を変数名に使用-- functionは予約語
local function = 5  
-- 正しい例
if x == 5 then
  print("five")
end

6. ループ関連のエラー

'=' expected near 'in'

-- エラーケース: forループの構文ミス
for i in 1, 10 do  -- inではなく=を使う
  print(i)
end

-- 正しい例(数値forループ)
for i = 1, 10 do
  print(i)
end

-- または(イテレータforループ)
for i, v in ipairs({1,2,3}) do
  print(i, v)
end

7. テーブル長さ関連のエラー

attempt to get length of a number value

-- エラーケース
local x = 5
print(#x)  -- 数値の長さは取得できない

-- 正しい例
local x = {1, 2, 3}
print(#x)  -- 3

8. メタテーブル関連のエラー

attempt to perform arithmetic on local 'obj' (a table value)

-- エラーケース: メタメソッドなしでテーブル演算
local t1 = {a = 1}
local t2 = {a = 2}
local result = t1 + t2  -- メタメソッド未定義

-- 正しい例
local mt = {
  __add = function(a, b)
    return {a = a.a + b.a}
  end
}
local t1 = setmetatable({a = 1}, mt)
local t2 = setmetatable({a = 2}, mt)
local result = t1 + t2

9. グローバル変数関連の警告的エラー

attempt to index global 'variable' (a nil value)

-- エラーケース: タイプミス
stirng.upper("hello")  -- stringのtypo

-- 正しい例
string.upper("hello")

エラー防止のベストプラクティス

1. 変数の初期化を忘れない

-- 悪い例
if x > 5 then end

-- 良い例
local x = 0
if x > 5 then end

2. local を使う習慣

-- 悪い例(グローバル汚染)
x = 5

-- 良い例
local x = 5

3. nil チェックを行う

-- 安全なコード
if myTable and myTable.field then
  print(myTable.field)
end

4. type() 関数で型チェック

local x = getSomeValue()
if type(x) == "number" then
  print(x + 5)
elseif type(x) == "string" then
  print(x .. " text")
end

5. pcall() でエラーを捕捉

local success, result = pcall(function()
  return riskyOperation()
end)

if success then
  print("成功:", result)
else
  print("エラー:", result)
end

デバッグのヒント

  1. エラーメッセージの行番号を確認
  2. "attempt to ○○ a ××× value" の ××× 部分を見る(nil, number, string, tableなど)
  3. 変数の型を print(type(変数)) で確認
  4. スペルミス・typoをチェック
  5. 括弧・end・then・do の対応を確認

エラーは大きく**「文法エラー(Syntax Error)」「実行時エラー(Runtime Error)」**の2つに分けると、非常に理解しやすくなります。

  • 文法エラー: 「てにをは」の間違い。プログラムが実行されるに見つかるエラー。
  • 実行時エラー: 文法は合っているが、実行している途中で矛盾が起きて止まるエラー。

それぞれの代表的なエラーについて、**「❌ 間違い」「✅ 修正」**のサンプルコードをまとめました。


1. 文法エラー (Syntax Errors)

プログラムを実行する前に、「書き方のルールが違うから読めないよ!」と怒られるパターンです。

'end' expected (to close ...)

意味: 「終わり(end)が見当たらないよ!」
Luaで一番多いエラーです。if, for, function などには必ず対になる end が必要です。

  • ❌ 間違い(Bad)

    -- if文の終わりに end がない
    local score = 100
    if score == 100 then
        print("満点!")
    
    -- ここでファイルが終わっている
    
  • ✅ 修正(Good)

    local score = 100
    if score == 100 then
        print("満点!")
    end -- <-- 忘れない!
    

'then' expected near ...

意味:if の条件の後に then がないよ!」
他の言語(C言語やJavaScriptなど)を知っている人がよくやる間違いです。

  • ❌ 間違い(Bad)

    -- then を書き忘れている
    if score > 80
        print("合格")
    end
    
  • ✅ 修正(Good)

    -- 条件式の後に then を書く
    if score > 80 then
        print("合格")
    end
    

unexpected symbol near '='

意味: 「ここに = があるのはおかしいよ!」
一番多いのは、**「等しいかどうか(比較)」**を調べる時に、== ではなく = を使ってしまうミスです。

  • ❌ 間違い(Bad)

    -- if文の中では「比較」の == を使うべき場所
    if score = 100 then
        print("満点")
    end
    
  • ✅ 修正(Good)

    -- 等しいか調べる時はイコールを2つ
    if score == 100 then
        print("満点")
    end
    

2. 実行時エラー (Runtime Errors)

書き方は合っているけれど、動かしてみたら「中身が空っぽだった」「計算できなかった」などで止まるパターンです。

attempt to index a nil value

意味: 「空っぽ(nil)の箱の中身を見ようとしたよ!」
【最重要】 初心者が一番悩むエラーです。「テーブル(配列)」だと思っていた変数が、実は nil だった時に起きます。

  • ❌ 間違い(Bad)

    local hero = nil  -- 何も入っていない
    
    -- 空っぽなのに .hp(体力)を取り出そうとした
    print(hero.hp)
    
  • ✅ 修正(Good)

    -- ちゃんとテーブルとして初期化する
    local hero = { hp = 100 }
    
    print(hero.hp) -- これなら表示できる
    

attempt to call a nil value

意味: 「存在しない関数を呼び出そうとしたよ!」
多くの場合、関数名のスペルミス(打ち間違い)です。

  • ❌ 間違い(Bad)

    -- print を prinnt と間違えている
    prinnt("こんにちは")
    
  • ✅ 修正(Good)

    -- 正しい名前で呼ぶ
    print("こんにちは")
    

    ヒント: 定義していない自作関数を呼ぼうとした時もこのエラーになります。

attempt to perform arithmetic on a string value

意味: 「文字を使って計算しようとしたよ!」
計算できない文字列を足したり引いたりした時に起きます。

  • ❌ 間違い(Bad)

    local message = "ハロー"
    -- 文字に数字を足そうとしている
    print(message + 1)
    
  • ✅ 修正(Good)

    local num = 10
    -- 数字同士なら計算できる
    print(num + 1)
    
    -- 文字をつなげたい場合は + ではなく .. を使う
    print(message .. "ワールド")
    

stack overflow

意味: 「処理が積み重なりすぎて限界を超えたよ!(無限ループ)」
関数が自分自身を呼び続け、止まらなくなった時に起きます。

  • ❌ 間違い(Bad)

    function test()
        -- 終わりがなく、永遠に自分を呼び続ける
        test()
    end
    
    test()
    
    Output:
    lua5.4: Main.lua:3: stack overflow
    stack traceback:
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    ...	(skipping 999971 levels)
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:3: in function 'test'
    Main.lua:6: in main chunk
    [C]: in ?
    
  • ✅ 修正(Good)

    -- 通常、再帰呼び出しには終了条件をつける
    -- もしくは、単に呼び出しミスなら修正する
    function test()
        print("一回だけ実行")
    end
    
    test()
    

まとめ:エラーが出た時の対処フロー

  1. エラーメッセージを読む (「index a nil」か「'end' expected」か?)
  2. 行番号を見る (その行か、その少し上に原因がある)
  3. 変身の中身を疑う (print(変数名) をエラーの前の行に入れて、中身が nil になっていないか確認する)

このように「間違った例」と見比べることで、「あ、自分もこれやってる!」と気づきやすくなります。


Pythonの代表的なエラーメッセージ一覧と対処法

Pythonでよく出るエラーメッセージを、初心者が理解しやすいように「原因」「ヒント」「簡単な間違い例と修正例」とともにまとめます。文法エラー(SyntaxError)と実行時エラー(RuntimeErrorや例外)に分けて紹介します。

Pythonの主なエラー一覧(初心者向け)

1. 文法エラー(SyntaxError)

例1: SyntaxError: invalid syntax

  • 原因: Pythonの文法に合わない書き方をしたときに出ます。
  • ヒント: 文の終わりや区切り、括弧の対応を確認しましょう。

間違い例

print("こんにちは"

→ 括弧の閉じ忘れ

修正例

print("こんにちは")

例2: SyntaxError: unexpected EOF while parsing

  • 原因: プログラムの最後に必要な部分(例えば括弧やクォーテーション)が閉じられていない。
  • ヒント: 開いた括弧やクォーテーションは必ず閉じる。

間違い例

name = "太郎
print(name)

→ 文字列の閉じ忘れ

修正例

name = "太郎"
print(name)

2. 実行時エラー(例外)

例3: NameError: name 'x' is not defined

  • 原因: 使おうとした変数や関数が定義されていない。
  • ヒント: 変数名のスペルミスや、定義前の利用をチェック。

間違い例

print(num)

→ numが定義されていない

修正例

num = 10
print(num)

例4: TypeError: unsupported operand type(s) for +: 'int' and 'str'

  • 原因: 異なる型を足し算などで使おうとした。
  • ヒント: 型をそろえるか、変換を使う。

間違い例

age = 18
print("年齢は" + age)

→ int型のageを文字列に足そうとした

修正例

age = 18
print("年齢は" + str(age))

または

age = 18
print("年齢は", age)

例5: ZeroDivisionError: division by zero

  • 原因: 0で割り算をしようとした。
  • ヒント: 割る数が0になっていないか確認する。

間違い例

a = 10
b = 0
print(a / b)

修正例

a = 10
b = 2
if b != 0:
    print(a / b)
else:
    print("0で割ることはできません")

例6: IndexError: list index out of range

  • 原因: リストの範囲外のインデックスを指定した。
  • ヒント: インデックスは0から始まり、リストの長さを超えないように。

間違い例

numbers = [1, 2, 3]
print(numbers[3])

修正例

numbers = [1, 2, 3]
print(numbers[2])  # 最後の要素はindex 2

例7: ValueError: invalid literal for int() with base 10

  • 原因: 文字列を数値に変換しようとしたが、数字以外の文字が含まれていた。
  • ヒント: 入力値が正しいか確かめる。

間違い例

num = int("abc")

修正例

num_str = "123"
num = int(num_str)

まとめ

  • 文法エラーは書き方の間違い(括弧の閉じ忘れ、コロンの抜けなど)。
  • 実行時エラーはプログラムの実行中に起こる問題(変数の未定義、型の不一致、範囲外アクセスなど)。
  • エラーの内容をよく読み、どこが問題かを考えることが大切です。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?