ValueError: Python でアンパックするのに十分な値がありません
-
Python の
ValueError
とは -
Python 辞書の
ValueError: unpack するのに十分な値がありません
を修正 -
Python の
ValueError: unpack するのに十分な値がありません
を修正
これは、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 is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn関連記事 - Python Error
- AttributeError の解決: 'list' オブジェクト属性 'append' は読み取り専用です
- AttributeError の解決: Python で 'Nonetype' オブジェクトに属性 'Group' がありません
- AttributeError: 'generator' オブジェクトに Python の 'next' 属性がありません
- AttributeError: 'numpy.ndarray' オブジェクトに Python の 'Append' 属性がありません
- AttributeError: Int オブジェクトに属性がありません
- AttributeError: Python で 'Dict' オブジェクトに属性 'Append' がありません