59 votos

Por qué afirmar que no es ampliamente utilizado?

He encontrado python instrucción assert es una buena manera de atrapar a situaciones que nunca debería suceder. Y puede ser removido por python optimización cuando el código es de confianza.

Parece ser un perfecto mecanismo para ejecutar aplicaciones python en modo de depuración. Pero buscando en varios python proyectos como django, retorcido y zope casi nunca se utiliza. Así que, ¿por qué sucede esto?

¿Por qué afirma afirmaciones no es ampliamente utilizado en la comunidad de python?

61voto

Ferdinand Beyer Puntos 27723

Supongo que la principal razón para assert no se utiliza más a menudo es que nadie usa Python "optimizado" modo.

Afirma que son una gran herramienta para detectar errores de programación, para protegerse de situaciones inesperadas, pero todo esto de comprobación de error viene con un costo. Los lenguajes compilados como C/C++, esto en realidad no importa, ya que afirma que sólo están disponibles en modo de depuración.

En Python, por otro lado, no hay ninguna distinción estricta entre debug y release modo. El intérprete de una "optimización de la bandera" (-O), pero en la actualidad esto no optimizar el código de bytes, pero sólo quita afirma.

Por lo tanto, la mayoría de los usuarios de Python simplemente ignorar el -O bandera y ejecutar sus scripts en modo "normal", que es una especie de el modo de depuración ya que afirma están habilitados y __debug__ es True, pero se considera la producción de "listo".

Tal vez sería más prudente cambiar la lógica, es decir, "optimizar" por defecto y sólo permiten que afirma de forma explícita el modo de depuración, pero creo que esto podría confundir a un montón de usuarios y dudo que se vea un cambio.

32voto

John Mee Puntos 12004

Varias razones vienen a la mente...

No es una función primaria

Muchos programadores, permite que no te agobies por la razón, la falta de respeto en nada que no sea un participante directo en el programa de la penúltima funcionalidad. La instrucción assert es la intención para la depuración y pruebas, y así, un lujo que no puede darse el lujo.

Test Unitarios

La instrucción assert es anterior a la subida de la unidad de pruebas. Mientras que la instrucción assert todavía tiene sus usos, de la unidad de pruebas es ahora ampliamente utilizado para la construcción de un ambiente hostil con el que golpear a la mierda de una subrutina y su sistema. Bajo estas condiciones de afirmar instrucciones empiezan a sentir los cuchillos en un tiroteo.

Mejora de la industria de respeto para las pruebas

La instrucción assert sirve mejor como la última línea de defensa. Se elevó a la noble e intocable alturas, bajo el lenguaje C, cuando ese idioma gobernado el mundo, como una gran manera de implementar la novedosos "a la defensiva programación"; reconoce y trampas de los desastres catastróficos en el momento en que se tambalean al borde del abismo. Esto fue antes de que el valor de las Pruebas se volvió ampliamente reconocido y respetado y desastres eran sustancialmente más común.

Hoy en día, es impensable para cualquier grave de software comercial para ser lanzado sin alguna forma de prueba. La prueba se toma en serio y se ha convertido en un enorme campo. Hay profesionales de Pruebas y Aseguramiento de la Calidad de los departamentos con grandes listas de verificación y autorización formal-offs. Bajo estas condiciones, los programadores tienden a no molestar con lo afirma porque tienen la confianza de que su código será objeto de tanta tedioso pruebas de que las probabilidades de wacky borde-de-desastre condiciones son tan remotas como para ser insignificante. Eso no quiere decir que tengan razón, pero si la culpa de la pereza de programación puede ser trasladado al departamento de control de calidad, el infierno ¿por qué no?

12voto

Michael Pratt Puntos 781

Yo no soy un autor de cualquiera de los proyectos, así que esto es sólo una suposición basada en mis propias experiencias. Sin preguntar directamente a la gente en aquellos proyectos en los que usted no obtendrá una respuesta concreta.

Afirmar es grande cuando usted está tratando de hacer la depuración, etc en su propia aplicación. Como se indica en el enlace que nos ha facilitado, sin embargo, con un condicional es mejor cuando la aplicación podría ser capaz de predecir y recuperarse de un estado. No he utilizado zope, pero en ambos Trenzado y Django, sus aplicaciones son capaces de recuperarse y continuar a partir de muchos errores en su código. En un sentido, ellos ya han "compilado" de las afirmaciones, ya que en realidad puede manejar.

Otra razón, en relación a eso, es que a menudo las aplicaciones de uso de librerías externas, tales como las que se enumeran posible que desee hacer el manejo de errores. Si la biblioteca simplemente utiliza afirmaciones, no importa lo que el error se va a recaudar un AssertionError. Con un condicional, las bibliotecas en realidad puede tirar útil de los errores que pueden ser capturados y tratados por la aplicación.

1voto

user1415926 Puntos 77

he encontrado un buen artículo sobre este tema:

https://mail.python.org/pipermail/python-list/2013-November/660401.html

fue muy útil para mí, para aclarar cuándo utilizar afirmaciones en python.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X