ValueError: アンパックする値が多すぎます

Zeeshan Afridi 2023年6月21日
  1. Python の ValueError とは
  2. Python の ValueError: unpack する値が多すぎます を修正する
  3. Python で Try-Catch を使用して例外 ValueError: unpack する値が多すぎます を処理する
ValueError: アンパックする値が多すぎます

ValueError: unpack する値が多すぎます は、代入演算子 = の左側の変数が代入演算子 = の右側の値と等しくない場合に発生することがあります。

これは、単一の input ステートメントでユーザーから複数の入力を取得しようとしたり、等しくない変数をいくつかの値に割り当てようとしたりするときによく発生します。

Python の ValueError とは

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

コード例:

# take two string values as input separated by a comma
x, y = input("Enter x and y: ").split(",")

出力:

Eneter x and y: 3,2,1
ValueError: too many values to unpack (expected 2)

上記のコードでわかるように、xy の 2つの入力を使用しています。 input ステートメントは、コンマ , で区切られた 2つの値を想定しています。

ただし、この場合、トピックを示すために 3つの値を入力として提供したため、ValueError: too many values to unpack がスローされました。

ValueError: unpack する値が多すぎます の別のケースは、変数に値を直接割り当てている可能性があります。 例を通してそれを理解しましょう。

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

上記は、ValueError をスローする他のいくつかのケースです。

Python の ValueError: unpack する値が多すぎます を修正する

ValueError を回避するには、input ステートメント、list、または array のいずれかで期待される値の正確な数を指定する必要があります。 ベスト プラクティスは、try-catch ブロックを使用し、ユーザーに案内するメッセージを表示することです。

ValueError: unpack する値が多すぎます を修正する方法を理解しましょう。

# User message --> Enter the two numbers to add  ::
a, b = input("Enter two numbers to add  ::  ").split(",")

# type casting a and b
a = int(a)
b = int(b)

print("The sum of the two numbers is     :: ", a + b)

出力:

Enter two numbers to add  ::  22,23
The sum of the two numbers is     ::  45

Python で Try-Catch を使用して例外 ValueError: unpack する値が多すぎます を処理する

他のほとんどすべてのプログラミング言語には、例外処理のための try-catch メカニズムがあります。 例外処理は、プログラムをクラッシュさせる前にエラーまたは例外を制御し、エラーの性質と原因を表示するのに役立つ予防的なメカニズムです。

また、メッセージを表示して例外を解釈することもできます。

例を通してそれを理解しましょう。

try:
    # User message --> Enter the two numbers to add  ::
    x, y = input("Enter  two numbers to add  ::  ").split(",")

    # type casting x and y
    x = int(x)
    y = int(y)
    print("The sum of the two numbers is      :: ", x + y)

except ValueError as v:
    print(
        "Oops! Looks like you have enter an invalid number of input"
        + "\nPlease enter two numbers to add"
    )
    print("ValueError:", v)

print("\nWow! The program is not crashed.")

出力:

Enter  two numbers to add  ::  1,2,3
Oops! Looks like you have enter an invalid number of input
Please enter two numbers to add
ValueError: too many values to unpack (expected 2)

Wow! The program is not crashed.

ご覧のとおり、上記のプログラムは失敗し、ValueError が発生しますが、プログラムはまだクラッシュしていないことに注意してください。

try ブロックのコードが ValueError 例外を引き起こしたことがわかります。行でクラッシュする代わりに、try ブロックはエラーを except ブロックに渡し、例外を解釈して表示します。 ユーザーへのカスタマイズされたメッセージ。 カスタマイズされたメッセージは、エラーを簡単に解釈するのに役立ちます。

著者: 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