AttributeError:无法设置属性

编程入门 行业动态 更新时间:2024-10-07 12:21:04
本文介绍了AttributeError:无法设置属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在做一个传统的django项目,在那里某个地方定义了一个类,如下所示;

I am working on a legacy django project, in there somewhere there is a class defined as follows;

from django.http import HttpResponse class Response(HttpResponse): def __init__(self, template='', calling_context='' status=None): self.template = template self.calling_context = calling_context HttpResponse.__init__(self, get_template(template).render(calling_context), status)

并且此类在视图中使用如下

and this class is used in views as follows

def some_view(request): #do some stuff return Response('some_template.html', RequestContext(request, {'some keys': 'some values'}))

此类的创建主要是为了使他们可以使用它在单元测试中执行断言.即,他们没有使用django.test.Client来测试视图,而是创建了一个模拟请求并将其传递给as(在测试中将视图称为可调用视图)

this class was mainly created so that they could use it to perform assertions in the unit tests .i.e they are not using django.test.Client to test the views but rather they create a mock request and pass that to view as(calling the view as a callable) in the tests as follows

def test_for_some_view(self): mock_request = create_a_mock_request() #call the view, as a function response = some_view(mock_request) #returns an instance of the response class above self.assertEquals('some_template.html', response.template) self.assertEquals({}, response.context)

问题是在测试套件的一半(相当大的测试套件)中,某些测试在执行

The problem is that half way through the test suite(quite a huge test suite), some tests begin blowing up when executing the

return Response('some_template.html', RequestContext(request, {'some keys': 'some values'}))

并且堆栈跟踪为

self.template = template AttributeError: can't set attribute

完整堆栈跟踪看起来像

====================================================================== ERROR: test_should_list_all_users_for_that_specific_sales_office ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/austiine/Projects/mped/console/metrics/tests/unit/views/sales_office_views_test.py", line 106, in test_should_list_all_users_for_that_specific_sales_office response = show(request, sales_office_id=sales_office.id) File "/Users/austiine/Projects/mped/console/metrics/views/sales_office_views.py", line 63, in show "sales_office_users": sales_office_users})) File "/Users/austiine/Projects/mped/console/metrics/utils/response.py", line 9, in __init__ self.template = template AttributeError: can't set attribute

实际失败的测试是

def test_should_list_all_users_for_that_specific_sales_office(self): user_company = CompanyFactory.create() request = self.mock_request(user_company) #some other stuff #calling the view response = show(request, sales_office_id=sales_office.id) self.assertIn(user, response.calling_context["sales_office_users"]) self.assertNotIn(user2, response.calling_context["sales_office_users"])

显示视图的代码

def show(request, sales_office_id): user = request.user sales_office = [] sales_office_users = [] associated_market_names = [] try: sales_office = SalesOffice.objects.get(id=sales_office_id) sales_office_users = User.objects.filter(userprofile__sales_office=sales_office) associated_market_names = Market.objects.filter(id__in= (sales_office.associated_markets.all())).values_list("name", flat=True) if user.groups.all()[0].name == UserProfile.COMPANY_AO: associated_market_names = [market.name for market in sales_office.get_sales_office_user_specific_markets(user)] except: pass return Response("sales_office/show.html", RequestContext(request, {'keys': 'values'}))

推荐答案

此答案未解决此问题的具体问题,但解释了潜在的问题.引发此特定异常"AttributeError:无法设置属性"(请参见 source ),而您尝试更改的属性实际上是属性,没有设置器.如果您可以访问库的代码,则添加一个setter可以解决问题.

This answer doesn't address the specifics of this question, but explains the underlying issue. This specific exception "AttributeError: can't set attribute" is raised (see source) when the attribute you're attempting to change is actually a property that doesn't have a setter. If you have access to the library's code, adding a setter would solve the problem.

将源链接更新为代码中的新位置.

updated source link to new location in the code.

更多推荐

AttributeError:无法设置属性

本文发布于:2023-11-24 00:52:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1623367.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:属性   AttributeError

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!