使用Python自动搜索 StackOverflow 代码中的错误
在复制您遇到的错误、打开浏览器、粘贴它并打开正确的 Stack Overflow Answer 时,您是否曾经遇到过巨大的困难?不用担心,这是解决方案!我们要做的是编写一个Python脚本,它会自动检测代码中的错误,在 Stack Overflow 上搜索它,并打开与我们之前回答过的错误相关的几个选项卡。
使用的模块
- subprocess 模块用于通过创建新进程来通过Python代码运行新的应用程序或程序。创建 subprocess 模块的目的是替换 os 模块中可用的几种方法,这些方法被认为效率不高。
- 这 requests 模块允许您使用Python发送 HTTP 请求。
- webbrowser 模块允许我们启动网络浏览器。
做法:我们将脚本分为三个部分,即我们将创建三个函数如下:
- execute_return(cmd) :在第一个函数,我们将编写代码来读取和运行Python文件,并存储其输出或错误。
- mak_req(error):该函数将使用 Stack Overflow API 和我们从第一个函数得到的错误发出 HTTP 请求,并最终返回 JSON 文件。
- get_urls(json_dict):该函数从第二个函数获取 JSON,并获取并存储那些被 StackOverflow 标记为“已回答”的解决方案的 URL。然后最后在浏览器上打开包含 StackOverflow 答案的选项卡。
注意:还有一件事,在我们进入代码之前,您应该清楚 strip 和 split函数的概念。
Python3
# Import dependencies
from subprocess import Popen, PIPE
import requests
import webbrowser
# We are going to write code to read and run python
# file, and store its output or error.
def execute_return(cmd):
args = cmd.split()
proc = Popen(args, stdout=PIPE, stderr=PIPE)
out, err = proc.communicate()
return out, err
# This function will make an HTTP request using StackOverflow
# API and the error we get from the 1st function and finally
# returns the JSON file.
def mak_req(error):
resp = requests.get("https://api.stackexchange.com/" +
"/2.2/search?order=desc&tagged=python&sort=activity&intitle={}&site=stackoverflow".format(error))
return resp.json()
# This function takes the JSON from the 2nd function, and
# fetches and stores the URLs of those solutions which are
# marked as "answered" by StackOverflow. And then finally
# open up the tabs containing answers from StackOverflow on
# the browser.
def get_urls(json_dict):
url_list = []
count = 0
for i in json_dict['items']:
if i['is_answered']:
url_list.append(i["link"])
count += 1
if count == 3 or count == len(i):
break
for i in url_list:
webbrowser.open(i)
# Below line will go through the provided python file
# And stores the output and error.
out, err = execute_return("python C:/Users/Saurabh/Desktop/test.py")
# This line is used to store that part of error we are interested in.
erro = err.decode("utf-8").strip().split("\r\n")[-1]
print(erro)
# A simple if condition, if error is found then execute 2nd and
# 3rd function, otherwise print "No error".
if erro:
filter_error = erro.split(":")
json1 = mak_req(filter_error[0])
json2 = mak_req(filter_error[1])
json = mak_req(erro)
get_urls(json1)
get_urls(json2)
get_urls(json)
else:
print("No error")
输出: