我是python的初学者。我不明白问题是什么?
the runtime process for the instance running on port 43421 has unexpectedly quit
ERROR 2019-12-24 17:29:10,258 base.py:209] Internal Server Error: /input/
Traceback (most recent call last):
File "/var/www/html/sym_math/google_appengine/lib/django-1.3/django/core/handlers/base.py", line 178, in get_response
response = middleware_method(request, response)
File "/var/www/html/sym_math/google_appengine/lib/django-1.3/django/middleware/common.py", line 94, in process_response
if response.status_code == 404:
AttributeError: 'tuple' object has no attribute 'status_code'
答案 0 :(得分:0)
middleware_method
返回的都是tuple
,因此形式为('a', 1, [])
或其他形式。
错误告诉您不能按名称访问元组的成员,因为它们没有名称。
也许您创建了这样的元组:
status_code = 404
name = 'Not found'
response = (name, status_code)
一旦声明了元组,进入它的名称就会丢失。您有两种选择可以解决问题。
您可以按索引获取对象,就像使用列表一样:
assert response[1] == 404
如果您不知道元组是什么样,只需打印它并计算索引。
如果确定要使用名称,则可以创建一个namedtuple
,前提是元组每次都要采用相同的格式。
from collections import namedtuple
Response = namedtuple('Response', ('name', 'status_code')
response = Response('Not found', 404)
assert response.status_code == 404
或者,您的代码中可能有一个错误,即您无意中返回了一个元组,但是其中一部分是requests.Response
对象。在这种情况下,您可以像“直接访问”中那样提取对象,然后按原样使用。
将不得不看一下代码以获得更多帮助,但是可能类似于:
response[2].status_code
答案 1 :(得分:0)
我将通过一个简单的示例来说明该错误的原因
def example_error():
a1 = "I am here"
b1 = "you are there"
c1 = "This is error"
return a1, b1, c1
def call_function():
strings = example_error()
s1 = strings.a1
s2 = strings.b1
s3 = strings.c1
print(s1, s2, s3)
call_function()
这将返回错误
AttributeError: 'tuple' object has no attribute 'a1'
因为我在example_error函数中返回了三个变量a1,b1,c1,并尝试使用单个变量字符串来获取它们。
我可以通过使用以下修改后的call_function来摆脱这种情况
def call_function():
strings = example_error()
s1 = strings[0]
s2 = strings[1]
s3 = strings[2]
print(s1, s2, s3)
call_function()
由于您没有显示代码,所以我假设您已经完成了第一种情况下的类似操作。