ValueError: Python でアンパックするのに十分な値がありません

Zeeshan Afridi 2023年10月10日
  1. Python の ValueError とは
  2. Python 辞書の ValueError: unpack するのに十分な値がありません を修正
  3. Python の ValueError: unpack するのに十分な値がありません を修正
ValueError: Python でアンパックするのに十分な値がありません

これは、Python プログラミングを新しく始めたばかりの場合によくあるエラーです。または、それらの値をキャッチするために、より多くの値を提供するのに、より少ない変数 (コンテナー) を提供するという型エラーである場合もあります。 または、辞書の値またはキーを反復処理しようとしているが、両方に同時にアクセスしようとした場合。

この記事では、各シナリオを例とともに詳しく見ていきますが、その前に、Python での ValueError とは何かを理解しましょう。

Python の ValueError とは

ValueError は、値の数が変数の数と一致しない場合に発生する Python の一般的な例外で、入力、直接代入、配列を介して、または制限された値にアクセスします。 ValueError を理解するために、例を挙げてみましょう。

# this input statement expects three values as input
x, y, z = input("Enter values for x, y and z: ").split(",")

出力:

Enter values for x, y and z: 1,2
ValueError: not enough values to unpack (expected 3, got 2)

上記の例では、入力値をキャッチするために 3つの変数 x,y,z がありますが、ValueError を示すために 2つの入力値を提供します。

input ステートメントには 3つの値があり、ユーザー入力値が期待される条件を満たしていないため、ValueError: unpacked (expected 3, got 2) をスローします。

エラー自体は一目瞭然です。 予想される値の数は 3 ですが、2 を指定したことがわかります。

ValueError の他のいくつかの一般的な原因は、次の可能性があります。

a, b, c = 3, 5  # ValueError: not enough values to unpack (expected 3, got 2)
a, b, c = 2  # ValueError: not enough values to unpack (expected 3, got 1)
# ValueError: not enough values to unpack (expected 4, got 3)
a, b, d, e = [1, 2, 3]

Python 辞書の ValueError: unpack するのに十分な値がありません を修正

Python では、ディクショナリは要素がキーと値のペアになっている別のデータ構造であり、すべてのキーはキーに対して対応する値を持つ必要があり、それらのキーを使用して値にアクセスできます。

Python での辞書の構文:

student = {"name": "Zeeshan Afridi", "degree": "BSSE", "section": "A"}

これは辞書の一般的な構造です。 左の値はキーで、その他はキーの値です。

Python 用の関数、keys()values()items() などの辞書を指定しました。しかし、これらは辞書をループするための最も一般的で便利な関数です。

print("Keys of Student dictionary: ", student.keys())
print("Values of Student dictionary: ", student.values())
print("Items of Student dictionary: ", student.items())

出力:

Keys of Student dictionary:  dict_keys(['name', 'degree', 'section'])
Values of Student dictionary:  dict_values(['Zeeshan Afridi', 'BSSE', 'A'])
Items of Student dictionary:  dict_items([('name', 'Zeeshan Afridi'), ('degree', 'BSSE'), ('section', 'A')])

ValueError: unpack するのに十分な値がありません が Python 辞書で発生する理由を見てみましょう。

student = {
    # Keys     :  Values
    "name": "Zeeshan Afridi",
    "degree": "BSSE",
    "section": "A",
}

# iterate user dictionary
for k, v, l in student.items():  # This statement throws an error
    print("Key:", k)
    print("Value:", str(v))

出力:

ValueError: not enough values to unpack (expected 3, got 2)

ご覧のとおり、.items() 関数は student 辞書のキーと値をキャッチするために 2つの変数を想定しているため、上記のコードはエラーをスローしましたが、3つの変数 k,v,l を提供しました。 .

そのため、student ディクショナリには l のスペースがなく、ValueError: unpack する値が不足しています (予想される 3、2 を取得しました) がスローされます。

これを修正するには、辞書の変数を修正する必要があります。

for k, v in student.items():

これは、Python で辞書を反復処理する正しいステートメントです。

Python の ValueError: unpack するのに十分な値がありません を修正

Python でこのような例外を回避するには、予想される値の数を変数に指定し、フォームやテキスト フィールドにデータを入力する際に役立つメッセージを表示する必要があります。

それに加えて、try-catch ブロックを使用して、プログラムをクラッシュさせる前にそのようなエラーをキャプチャできます。

Python で ValueError: unpack するのに十分な値がありません を修正する方法を理解しましょう。

# User message --> Enter three numbers to multiply  ::
x, y, z = input("Enter three numbers to multiply  ::  ").split(",")

# type casting x,y, and z
x = int(x)
y = int(y)
z = int(z)

prod = x * y * z

print("The product of x,y and z is  :: ", prod)

出力:

Enter three numbers to multiply  ::  2,2,2
The product of x,y and z is  ::  8

この例では、input ステートメントは 3つの入力を想定しており、予想される数の入力を提供しているため、ValueError はスローされませんでした。

著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

関連記事 - Python Error