我是Python的初学者。我试图通过请求模块从自制软件包API中提取分析信息。为此,我首先动态获取每个包的url,然后循环遍历每个url以获取所需的信息。脚本运行良好,直到循环在“carina”包上停止。我假设停止是因为路径package_json['analytics']['install']['30d'][package_name]
在[package_name]
部分(the package name in the analytics dictionary becomes "carina --HEAD")中不再正确
这一次,我希望循环只传递到下一个包并打印一条错误消息
到目前为止,我尝试使用以下方法解决此问题:
try:
r = requests.get(package_url)
package_json = r.json()
exception:
pass
但它不起作用
有人能帮我吗
r = requests.get("https://formulae.brew.sh/api/formula.json")
packages_json = r.json()
packages_string = json.dumps(packages_json, indent=2)
results = []
t1 = time.perf_counter()
for package in packages_json:
package_name = package["name"]
package_desc = package["desc"]
package_url = f'https://formulae.brew.sh/api/formula/{package_name}.json'
try:
r = requests.get(package_url)
package_json = r.json()
exception:
pass
installs_30 = package_json['analytics']['install']['30d'][package_name]
installs_90 = package_json['analytics']['install']['90d'][package_name]
installs_365 = package_json['analytics']['install']['365d'][package_name]
data = {
"nome": package_name,
"descrizione": package_desc,
"analytics": {
"30d": installs_30,
"90d": installs_90,
"365d": installs_365
}
}
results.append(data)
time.sleep(r.elapsed.total_seconds())
if r.status_code != 200:
print (f"Got error for {package_name}")
else:
print(f'Got {package_name} in {r.elapsed.total_seconds()} seconds')
t2 = time.perf_counter()
print(f"Finito in {t2-t1} secondi")
with open("packages_info.json", "w") as f:
json.dump(results, f, indent=2)
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-3-42e0fb795383> in <module>
16
17
---> 18 installs_30 = package_json['analytics']['install']['30d'][package_name]
19 installs_90 = package_json['analytics']['install']['90d'][package_name]
20 installs_365 = package_json['analytics']['install']['365d'][package_name]
KeyError: 'carina'
嘿,你用错了以下部分的语法:
我只是在colab中运行了代码,它对我来说很好,只需将
exception
更改为except
结果
等等。。祝你好运
我认为上面提到的代码中的语法有问题。 试试这个-
其他答案可能不完整。虽然将
exception
更改为except
确实可以解决其中一个错误,但您的问题特别询问了检查路径package_json['analytics']['install']['30d'][package_name]
并在出现关键错误时转到下一个包。要做到这一点,您需要将try/except
调用包装在这些特定的代码行中。以下是一个例子:相关问题 更多 >
编程相关推荐