Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Obtener numero de linea
#1
Buenas a todos, soy nuevo por acá y también relativamente nuevo en python. Me gustaría saber, si se puede, como obtener el numero de linea donde se ejecuta una función en el modulo? Un ejemplo:

Código:
from urllib.request import urlopen

r = urlopen("https://www.recursospython.com")
with open("index.html", "wb") as f:
    f.write(r.read())
    print('Succes', getCodeLine())
r.close()

Donde getCodeLine() seria una supuesta función que me devuelve el numero de linea en donde se ejecuta, en este caso imprimiría 6 en consola si esto seria el script completo. Si después agrego una linea mas al principio, devolvería 7, y así. 
Si también tienen algunos consejos, opiniones o un tutorial sobre debug en python se los agradezco.
Una aclaracion: No quiero saber un numero de linea del archivo donde esta escribiendo f.write() Solo puse ese codigo como ejemplo. Solo deseo saber alguna manera de obtener el numero de linea donde se ejecuta una supuesta funcion en el archivo fuente.
Responder
#2
Hola, bienvenido.

Para obtener el número de línea, acá tenés una solución:

  1. from inspect import currentframe, getframeinfo
  2. frameinfo = getframeinfo(currentframe())
  3. print(frameinfo.filename, frameinfo.lineno)


Para depuración en Python podés usar el módulo pdb: https://recursospython.com/guias-y-manua...rador-pdb/, aunque es más sencillo usar directamente un IDE que soporte depuración para Python (VSCode, PyCharm, etc.).

Saludos!
Responder
#3
(08-11-2020, 05:36 PM)Francisco escribió: Hola, bienvenido.

Para obtener el número de línea, acá tenés una solución:

  1. from inspect import currentframe, getframeinfo
  2. frameinfo = getframeinfo(currentframe())
  3. print(frameinfo.filename, frameinfo.lineno)


Para depuración en Python podés usar el módulo pdb: https://recursospython.com/guias-y-manua...rador-pdb/, aunque es más sencillo usar directamente un IDE que soporte depuración para Python (VSCode, PyCharm, etc.).

Saludos!

Hola Francisco, Gracias! Funciona, aunque siempre llama a la linea donde asignas frameinfo, lo solucione asi:

  1. from inspect import currentframe, getframeinfo
  2. #frameinfo = getframeinfo(currentframe())
  3.  
  4. #print(frameinfo.filename, frameinfo.lineno)
  5. print("a",getframeinfo(currentframe()).lineno)
  6.  
  7. print("b", getframeinfo(currentframe()).lineno)


Como vez me queda un poco larga la sentencia ya que me gustaría llamarlo cada vez que se ejecuta un print(), alguna forma de acortarlo?
Tengo VSCode, en su momento no me gusto mucho, lo veía un poco sobrecargado pero tendré que darle otra oportunidad.
Gracias.
Responder
#4
Hola, me alegra que te haya servido.

No veo cómo se podría acortar, pero si es solo para propósitos de depuración no me preocuparía por eso. Pero insisto en que depurar con print() es un poco primitivo, deberías avanzar con el depurador.

Saludos!
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)