私が使用している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)
プロンプトメッセージから判断すると、電話をかけるのを忘れていました 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'
>>>
上記のコードは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()
_
これは、python3で入力の動作が変更されたためです。
Python2.7では、入力は値を返し、プログラムはこのバージョンで正常に動作します
しかし、python3では入力は文字列を返します
これを試してみてください、それはうまくいくでしょう!
score1, score2 = eval(input("Enter two scores separated by a comma: "))
つまり、関数はより多くの値を返します!
例:
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)