TypeError:__ new __()缺少2个必需的位置参数:' shares'和'价格'

时间:2017-07-25 08:28:06

标签: python

我正在尝试使用namedtuple

from collections import namedtuple
Stock = namedtuple('Stock', ['name', 'shares', 'price'])

def compute_cost(records):
    total = 0.0
    for rec in records:
        s = Stock(*rec)
        total += s.shares * s.price
    return total

with open('r.txt') as f:
    content = f.readlines()
    content = [x.strip() for x in content]   
    for i in content:
         p = compute_cost(i)
    print (p)

似乎我有问题,就是我如何使用posicional arguments。

  File "b74.py", line 15, in <module>
    p = compute_cost(i)
  File "b74.py", line 7, in compute_cost
    s = Stock(*rec)
TypeError: __new__() missing 2 required positional arguments: 'shares' and 'price'

这是我的文本文件

hmf Kiza 100 2.33
piz Miki 999 0.75
air Dush 500 8.50

1 个答案:

答案 0 :(得分:3)

此错误消息表示您没有向Stock()构造函数传递足够的参数。你的元组有3个元素,所以你需要将3个参数传递给构造函数。

但是在这一行:

for rec in records:

records是您文件中的一行。因此rec只是单个字符。

提示:for rec in records.split(" ")