Según los documentos :
inspect.currentframe()
- ¿Hay una forma bien definida de verificar si una ruta es un nombre simple de archivo / carpeta en Python?
- No puedo instalar OpenCV3 en Anaconda3 python3.6 en macOS
- Operador Python 3 >> para imprimir a archivo
- coincidir fechas usando expresiones regulares de python
- ¿Es posible descomstackr un archivo .pyc comstackdo en un archivo .py?
Devuelve el objeto de marco para el marco de stack de la persona que llama.
Detalle de la implementación de CPython: esta función se basa en el soporte de marcos de stack de Python en el intérprete, que no se garantiza que exista en todas las implementaciones de Python. Si la ejecución en una implementación sin marco de stack Python es compatible, esta función devuelve Ninguna.
¿Cómo es que solo esta función está marcada como “dependiente de la implementación”? Si esta función no funciona, ¿no estarán disponibles funciones similares, como inspect.trace
, inspect.stack
, inspect.trace
, inspect.stack
, etc.?
Además, ¿qué significa “soporte de marco de stack” y por qué estaría ausente?
Encontré esta pregunta mientras buscaba la respuesta yo mismo. La disponibilidad de inspect.currentframe
está vinculada a sys._getframe
:
def currentframe(): """Return the frame of the caller or None if this is not possible.""" return sys._getframe(1) if hasattr(sys, "_getframe") else None
Por lo tanto, la restricción se aplica a todas las demás funciones que también utilizan sys._getframe
. Para inspect
, esto es solo inspect.stack
.
En contraste, inspect.trace
utiliza sys.exc_info
. Esta es una parte integral de los esquemas de manejo de excepciones, y siempre debe estar disponible. Todas las demás funciones relacionadas, por ejemplo, getframeinfo
, ya dependen de que haya un marco. Su aplicabilidad depende de si desea inspeccionar una excepción o realizar un rastreo de llamadas.
Tenga en cuenta que mi jython local y predeterminado es compatible con sys._getframe
. ipy funciona si se ejecuta con -X:Frames
.
Las otras implementaciones a las que se refieren los documentos son Jython y IronPython. Estas son implementaciones de lenguaje Python que se ejecutan en una VM diferente (JVM y CLR) y no tienen ese marco de stack. Sin embargo, creo que IronPython ha agregado algo de soporte para eso.