decimal.Decimal不是可迭代的错误

时间:2016-07-13 20:51:25

标签: python

我有一个简单的脚本,它包含一个包含3列数据的列表。第二列数据包含带有美元符号的货币值。我从第二栏中删除了美元符号,现在我需要将这些值加起来。我得到一个" decimal.Decimal不可迭代"错误。这是代码:

from decimal import Decimal

def main():
total = 0.0


try:
    infile = open('list.txt', 'r')

    for i in infile:
        parts = i.split()
        if len(parts) > 1:
            dollar_dec = Decimal((parts[1]).strip('$'))
            total = sum(dollar_dec)
            print (total)

    infile.close()


except Exception as err:
              print(err)

main()

3 个答案:

答案 0 :(得分:1)

total = sum(dollar_dec)

sum()采用可迭代(例如列表)并将所有值相加。您传递的是一个数字,这是一个错误。你可能想要

total = Decimal('0.0')
...
total += dollar_dec

这将保持总计。

(编辑 - 总数必须是十进制,以便为其添加小数)

答案 1 :(得分:1)

说,您有以下文件内容:

content = """\
one $1.50
two $3.00
three $4.50"""

您可以使用就地运算符+=来计算总数:

from decimal import Decimal
import io

total = Decimal(0)
with io.StringIO(content) as fd:
    for line in fd:
        parts = line.strip().split()
        if len(parts) > 1:
            dollard_dec = Decimal(parts[1].strip("$"))
            total += dollard_dec

print(total)

她,你得到:9.00

您还可以在iterable上使用sum()(此处为理解列表):

with io.StringIO(content) as fd:
    total = sum(Decimal(line.strip().split()[1].strip("$"))
                for line in fd)
print(total)

是的,你也得到9.00!

答案 2 :(得分:0)

sum()需要迭代。只需将代码更改为total += dollar_dec

即可