2011-08-28 8 views

Respuesta

24

No y sí.

De acuerdo con official Python 2.7.2 grammar, la única aparición de la palabra from está en la cláusula import_from, entonces no.

En el Python 3.1.3 grammar una nueva cláusula

raise_stmt: 'raise' [test ['from' test]] 

aparece, así que sí.

12

En Python 2.x, el único uso de from es para la declaración from x import y. Sin embargo, para Python 3.x, que puede ser utilizado en conjunción con el raise declaración, por ejemplo:

try: 
    raise Exception("test") 
except Exception as e: 
    raise Exception("another exception") from e 
+0

¿Qué hace esto, exactamente? ¿Está la excepción original implícitamente encadenada de alguna manera? Eso me parece antitético; es mejor tomarlo explícitamente como un parámetro de constructor ... ¿entonces seguramente hace algo más? –

+0

Personalmente, nunca lo he usado, solo sé que existe, y está destinado a generar una excepción causada directamente por otra. – rfw

3

La siguiente uso

from __future__ import some_feature 

es sintácticamente idéntica a una declaración de importación pero en lugar de la importación de una módulo, cambia el comportamiento del intérprete de alguna manera, dependiendo del valor de some_feature.

Por ejemplo, from __future__ import with_statement le permite usar la instrucción with de Python en Python 2.5, aunque la instrucción with no se agregó al lenguaje hasta Python 2.6. Debido a que cambia el análisis sintáctico de los archivos fuente, las importaciones __future__ deben aparecer al comienzo de un archivo fuente.

Consulte el __future__ statement documentation para obtener más información.

Véase el __future__ module documentation para obtener una lista de posibles __future__ importaciones y las versiones de Python están disponibles en.

+1

¿Quería publicar esto como respuesta a otra pregunta? Parece tangencialmente relacionado con este ... –

+0

En realidad, también importa desde el módulo '__future__'. –

+2

@Karl: No, no lo hice. Sí, '__future__' es un módulo, e importar desde' __future__' es una declaración de importación. Pero mi punto es que si bien importar desde el futuro es sintácticamente el mismo que cualquier otra importación, la * semántica * es diferente de una importación vainilla. No solo está importando otros nombres de símbolos, también está cambiando el comportamiento del intérprete de una manera importante. –

Cuestiones relacionadas