inspect.currentframe () puede no funcionar en algunas implementaciones?

Según los documentos :

inspect.currentframe()

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.