更新:2024/11/22

【SymPy】TypeError: cannot unpack non-iterable Symbol objectの解決方法

はるか
はるか
SymPyのsymbols使ってた。けど、TypeError出た。
ふゅか
ふゅか
あ、cannot unpack non-iterable Symbol objectって書いてあるね!

1. エラーの発生原因

SymPysymbols は1つまたは複数の変数(シンボル)を定義するために使われます。以下のコードを見てみましょう。

from sympy import symbols

x, y = symbols('x')

このコードを実行すると、

TypeError: cannot unpack non-iterable Symbol object

が発生します。日本語にすると

TypeError: 非イテラブルな Symbol オブジェクトを展開することはできません

このエラーの原因は、symbols('x') の戻り値です。

symbols('x') は単一のシンボル x を返す

つまり、x, y のように2つの変数に対して代入を試みているため、エラーが発生します。

ふゅか
ふゅか
symbols('x')が返すのはシンボルx1つだけ。だから、x, yに分割できないの!

2. 解決方法

このエラーを解決するには、symbols の使い方を正しく理解し、適切に記述する必要があります。

2.1. シンボルを1つだけ定義する場合

シンボルが1つだけ必要な場合は、以下のように記述します。

from sympy import symbols

x = symbols('x')  # 単一のシンボルを変数 x に代入

これでエラーは発生しません。

2.2.  複数のシンボルを定義する場合

複数のシンボルを定義するには、シンボル名をスペースまたはカンマで区切り、symbols に渡します。例えば、xy の2つのシンボルを定義する場合は以下のように記述します。

from sympy import symbols

x, y = symbols('x y')  # スペースで区切る
# または
x, y = symbols('x, y')  # カンマで区切る

これにより、xy の2つの変数にそれぞれ対応するシンボルが正しく代入されます。

はるか
はるか
スペースかカンマで区切るのがポイント。
PR