📜  使用Python自动搜索 StackOverflow 代码中的错误

📅  最后修改于: 2022-05-13 01:55:41.609000             🧑  作者: Mango

使用Python自动搜索 StackOverflow 代码中的错误

在复制您遇到的错误、打开浏览器、粘贴它并打开正确的 Stack Overflow Answer 时,您是否曾经遇到过巨大的困难?不用担心,这是解决方案!我们要做的是编写一个Python脚本,它会自动检测代码中的错误,在 Stack Overflow 上搜索它,并打开与我们之前回答过的错误相关的几个选项卡。

使用的模块

  • subprocess 模块用于通过创建新进程来通过Python代码运行新的应用程序或程序。创建 subprocess 模块的目的是替换 os 模块中可用的几种方法,这些方法被认为效率不高。
  • requests 模块允许您使用Python发送 HTTP 请求。
  • webbrowser 模块允许我们启动网络浏览器。

做法:我们将脚本分为三个部分,即我们将创建三个函数如下:

  1. execute_return(cmd) :在第一个函数,我们将编写代码来读取和运行Python文件,并存储其输出或错误。
  2. mak_req(error):该函数将使用 Stack Overflow API 和我们从第一个函数得到的错误发出 HTTP 请求,并最终返回 JSON 文件。
  3. 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")


输出: