【发布时间】:2021-05-04 21:56:11
【问题描述】:
我有一个通过 Flask 中的会话创建的简单购物车:
session['cart'] += [{
'product_name': request.form['product_name'],
'product_cost': request.form['product_cost'],
'product_img': request.form['product_img'],
}]
购物车示例:
product_cart = [{'product_name': 'product1', 'product_cost': '300', 'product_img': ''},
{'product_name': 'product2', 'product_cost': '400', 'product_img': ''},
{'product_name': 'product3', 'product_cost': '300', 'product_img': ''},
]
在哪里product_cart = session['cart']
我需要得到product_cost 值的总和。我试图这样做:
sum([int(product['product_cost']) for product in product_cart ])
但是出现了这个错误:TypeError: string indices must be integers。正如我未测试的那样,product_cost 应该是 int 类型,而不是 dict 中的 str。但是当我尝试获取它们的总和时,我已经将其转换为int(请参阅更高的代码)。
那么,我做错了什么,我该如何解决这个错误?谢谢!
编辑:
print(session['cart']:
[{'product_name': 'product1', 'product_cost': '300', 'product_img': '*binary img*'}, {'product_name': 'product2', 'product_cost': '400', 'product_img': '*binary img*'}]
完整追溯:
Traceback (most recent call last):
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site- packages\flask\app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\User\Documents\Projects\jewelry-store\app.py", line 336, in cart
full_cost = sum([int(product['product_cost']) for product in cart_products ])
File "C:\Users\User\Documents\Projects\jewelry-store\app.py", line 336, in <listcomp>
full_cost = sum([int(product['product_cost']) for product in cart_products ])
TypeError: string indices must be integers
【问题讨论】:
-
您能否打印
session['cart']的值并将其添加到您的问题文本中? -
根据你得到的错误,
product是一个字符串,你应该先把它转换成dict。 -
@dukkee 已编辑问题
-
您的求和代码对于显示的两个购物车(您的示例和打印出来的那个)都非常有效。您的代码不同(可能
cart_products与product_cart不同?)或者在与所示示例不同的购物车上调用时发生错误。正如 Gabip 已经观察到的那样,不知何故,您购物车中的一个或多个项目是字符串而不是字典。 -
请提供明确的minimal reproducible example。使用提供的
product_cart运行sum行没有引发任何错误...
标签: python