web-dev-qa-db-ja.com

ValueError:解凍するには値が多すぎます(予想2)

私が使用しているPythonチュートリアルブックで、同時代入の例を入力しました。プログラムを実行すると前述のValueErrorが発生し、実行できません理由を理解してください。

コードは次のとおりです。

#avg2.py
#A simple program to average two exam scores
#Illustrates use of multiple input

def main():
    print("This program computes the average of two exam scores.")

    score1, score2 = input("Enter two scores separated by a comma: ")
    average = (int(score1) + int(score2)) / 2.0

    print("The average of the scores is:", average)

main()

これが出力です。

>>> import avg2
This program computes the average of two exam scores.
Enter two scores separated by a comma: 69, 87
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    import avg2
  File "C:\Python34\avg2.py", line 13, in <module>
    main()
  File "C:\Python34\avg2.py", line 8, in main
    score1, score2 = input("Enter two scores separated by a comma: ")
ValueError: too many values to unpack (expected 2)
6
Ziggy

プロンプトメッセージから判断すると、電話をかけるのを忘れていました str.split 8行目の終わり:

score1, score2 = input("Enter two scores separated by a comma: ").split(",")
#                                                                ^^^^^^^^^^^

これを行うと、入力がコンマで分割されます。以下のデモを参照してください。

>>> input("Enter two scores separated by a comma: ").split(",")
Enter two scores separated by a comma: 10,20
['10', '20']
>>> score1, score2 = input("Enter two scores separated by a comma: ").split(",")
Enter two scores separated by a comma: 10,20
>>> score1
'10'
>>> score2
'20'
>>>
8
iCodez

上記のコードはPython 2.xで正常に機能します。inputは_raw_input_の後にevalが続くためPython 2.x https://docs.python.org/2/library/functions.html#input

ただし、上記のコードは、Python 3.xで言及したエラーをスローします。Python 3.xでは、astモジュールを使用できます- literal_eval() ユーザー入力のメソッド。

これは私が意味することです:

_import ast

def main():
    print("This program computes the average of two exam scores.")

    score1, score2 = ast.literal_eval(input("Enter two scores separated by a comma: "))
    average = (int(score1) + int(score2)) / 2.0

    print("The average of the scores is:", average)

main()
_
3
shaktimaan

これは、python3で入力の動作が変更されたためです。

Python2.7では、入力は値を返し、プログラムはこのバージョンで正常に動作します

しかし、python3では入力は文字列を返します

これを試してみてください、それはうまくいくでしょう!

score1, score2 = eval(input("Enter two scores separated by a comma: "))
0
DexJ

つまり、関数はより多くの値を返します!

例:

python2では、関数cv2.findContours() return-> _contours, hierarchy_

しかし、python3ではfindContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> image, contours, hierarchy

したがって、これらの関数を使用する場合、contours, hierachy = cv2.findContours(...)はpython2によって適切ですが、python3関数では3つの値を2つの変数に返します。

SO ValueError:解凍するには値が多すぎます(予想2)

0
X.Na