Búsqueda automática StackOverflow para errores en el código usando Python

¿Alguna vez enfrentó grandes dificultades para copiar el error con el que está atascado, abrir el navegador, pegarlo y abrir la Respuesta de desbordamiento de pila correcta? ¡No te preocupes, aquí está la solución! Lo que vamos a hacer es escribir una secuencia de comandos de Python, que detecta automáticamente el error del código, lo busca en Stack Overflow y abre las pocas pestañas relacionadas con nuestro error que también se respondieron anteriormente.

Módulos utilizados

  • El módulo de subproceso se utiliza para ejecutar nuevas aplicaciones o programas a través del código de Python mediante la creación de nuevos procesos. El módulo de subprocesos se creó con la intención de reemplazar varios métodos disponibles en el módulo os, que no se consideraban muy eficientes.
  • El módulo de requests le permite enviar requests HTTP usando Python.
  • El módulo webbrowser nos permite iniciar el navegador web.

Planteamiento: Dividiremos el script en tres partes, es decir, crearemos tres funciones de la siguiente manera: 

  1. ejecutar_retorno(cmd) : en la primera función, vamos a escribir código para leer y ejecutar el archivo python, y almacenar su salida o error.
  2. mak_req(error): esta función realizará una solicitud HTTP utilizando la API de desbordamiento de pila y el error que obtenemos de la primera función y finalmente devuelve el archivo JSON.
  3. get_urls(json_dict): esta función toma el JSON de la segunda función y obtiene y almacena las URL de aquellas soluciones que StackOverflow marca como «respondidas». Y finalmente abra las pestañas que contienen respuestas de StackOverflow en el navegador.

Nota: una cosa más, antes de pasar al código, debe tener claro el concepto de la función de separación y división .

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.
error = err.decode("utf-8").strip().split("\r\n")[-1]
print(error)
 
 
# A simple if condition, if error is found then execute 2nd and
# 3rd function, otherwise print "No error".
if error:
    filter_error = error.split(":")
    json1 = mak_req(filter_error[0])
    json2 = mak_req(filter_error[1])
    json = mak_req(error)
    get_urls(json1)
    get_urls(json2)
    get_urls(json)
     
else:
    print("No error")

Producción:

Publicación traducida automáticamente

Artículo escrito por harshsinha3682 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *