【发布时间】:2021-05-06 08:08:25
【问题描述】:
我认为对此没有太多解释,问题很简单。我收到一条错误消息 编辑:我在底部添加了完整的错误回溯。
错误:
"if i in items:
NameError: name 'items' is not defined"
代码:
class Cart:
items = {}
def addToCart(item):
global items
for i in item:
if i in items:
items[i] += item[i]
else:
items.update(item)
def removeFromCart(item):
global items
for i in item:
if i in items and items[i] > 1:
items[i] -= 1
elif i in items and items[i] <= 1:
items.pop(i, None)
函数是如何调用的:
...
from .cart import Cart
...
@action(detail=True, methods=["POST"])
def addToCart(self, request, pk=None):
item = request.data['item']
Cart.addToCart(item)
response = Cart.items
return Response(response, status = status.HTTP_200_OK)
内部服务器错误:/api/Orders/1/addToCart/ 回溯(最近一次通话最后): 文件“/home/bigmac/anaconda3/lib/python3.7/site-packages/django/core/handlers/exception.py”,第 34 行,在内部 响应 = get_response(请求) _get_response 中的文件“/home/bigmac/anaconda3/lib/python3.7/site-packages/django/core/handlers/base.py”,第 115 行 response = self.process_exception_by_middleware(e, request) _get_response 中的文件“/home/bigmac/anaconda3/lib/python3.7/site-packages/django/core/handlers/base.py”,第 113 行 响应 = Wrapped_callback(request, *callback_args, **callback_kwargs) 文件“/home/bigmac/anaconda3/lib/python3.7/site-packages/django/views/decorators/csrf.py”,第 54 行,在 Wrapped_view 返回 view_func(*args, **kwargs) 文件“/home/bigmac/anaconda3/lib/python3.7/site-packages/rest_framework/viewsets.py”,第 125 行,在视图中 return self.dispatch(request, *args, **kwargs) 文件“/home/bigmac/anaconda3/lib/python3.7/site-packages/rest_framework/views.py”,第 509 行,在调度中 响应 = self.handle_exception(exc) 文件“/home/bigmac/anaconda3/lib/python3.7/site-packages/rest_framework/views.py”,第 469 行,在 handle_exception self.raise_uncaught_exception(exc) 文件“/home/bigmac/anaconda3/lib/python3.7/site-packages/rest_framework/views.py”,第 480 行,在 raise_uncaught_exception 中 提高 exc 文件“/home/bigmac/anaconda3/lib/python3.7/site-packages/rest_framework/views.py”,第 506 行,在调度中 响应 = 处理程序(请求,*args,**kwargs) 文件“/home/bigmac/Documents/Bernard_Quests/ALUTA3.0/ALUTA/api/views.py”,第 89 行,在 addToCart Cart.addToCart(项目) 文件“/home/bigmac/Documents/Bernard_Quests/ALUTA3.0/ALUTA/api/cart.py”,第 7 行,在 addToCart 如果我在项目中: NameError:名称“项目”未定义
【问题讨论】:
-
首先,项目应该缩进以匹配 Cart 类。而且我们不知道两种方法是否属于 Cart 类(我认为是这样)。
-
类属性不是全局的,我猜你的字典实际上应该是一个 instance 属性。此外,您的方法缺少
self参数。 -
items看起来像一个类属性。使用Cart.items而不是全局变量。另外我假设方法addToCart和removeFromCart属于该类,为什么不接受self作为参数?或者至少使用classmethod装饰器并接受cls或其他名称的类?
标签: python python-3.x django python-2.7