我有一个从URL读取的python代码。
def submitTest(self,url):
response = None
if url is not None:
wptUrl = WebPageTestConfigUtils.getConfigValue('runTestURL')+"?f=json&url="+url+"&runs=3&video=1&web10=0&fvonly=1&mv=1&private=1&location=us_east_wptdriver:Chrome.DSL"
with closing(urllib.urlopen(wptUrl)) as response:
json.load(response)
return response["data"]["testId"]
我使用上下文lib docs https://docs.python.org/2/library/contextlib.html来关闭python连接。但是我在执行时遇到以下错误。
Traceback (most recent call last):
File "webPageTestUtils.py", line 59, in <module>
main()
File "webPageTestUtils.py", line 56, in main
print webPageTestProcessor.submitTest("www.amazon.com")
File "webPageTestUtils.py", line 27, in submitTest
return response["data"]["testId"]
AttributeError: addinfourl instance has no attribute '__getitem__'
我在这里做错了什么。我需要一种方法来关闭连接,如果发生了不好的事情,或者我已经完成了它。
答案 0 :(得分:0)
我在这里做错了什么?
发生了一个未被捕获的错误。
发生错误的原因是:引自@Nonnib:
json.load返回您需要的对象。您可能正在寻找: response_dict = json.load(响应)然后返回 response_dict [&#34;数据&#34;] [&#34; testId&#34;]
可能的解决方案:
捕获可能的错误并返回适当的结果
def submitTest(self,url):
response = None
if url is not None:
wptUrl = WebPageTestConfigUtils.getConfigValue('runTestURL')+"?f=json&url="+url+"&runs=3&video=1&web10=0&fvonly=1&mv=1&private=1&location=us_east_wptdriver:Chrome.DSL"
with closing(urllib.urlopen(wptUrl)) as response:
json.load(response)
try:
return response["data"]["testId"]
except AttributeError:
return "an AttributeError occured" # or return something else, up to you
except:
return "an error occured"
这样,with块将始终正常执行并在完成后关闭连接