2009-11-18 14 views
14

¿Cuál es el equivalente de esto en IronPython? ¿Es solo un bloque try-finally?¿Cuál es el equivalente del bloque C# "using" en IronPython?

using (var something = new ClassThatImplementsIDisposable()) 
{ 
    // stuff happens here 
} 
+0

Vamos a añadir algo de autoridad a este tema: http://lists.ironpython.com/ pipermail/users-ironpython.com/2008-July/007826.html –

+1

No veo nada relevante para esta pregunta. –

Respuesta

25

IronPython admite el uso de IDisposable con with declaración, por lo que puede escribir algo como esto:

with ClassThatImplementsIDisposable() as something: 
    pass 
+0

Buena opción para sus propios tipos, pero no funciona para tipos de marcos. –

+0

¿Alguna razón particular por la que no funciona con tipos de marcos? –

+1

¿Estás seguro? Acabo de probar con 'StreamWriter' y parece funcionar como se esperaba. –

6

IronPython (como de los candidatos 2.6 de liberación) apoya la declaración with, que envuelve un objeto IDisposable de una manera similar al uso.

+0

Simplemente curioso: ¿por qué los votos a favor? Hasta donde yo sé, esto es cierto: Python, como lenguaje, no incluye esto en el lenguaje. –

+2

-1 Python incluye esto, es la declaración 'con'. – Javier

+0

@Javier Badi: Repítelo una vez que hayas probado usarlo. – Teddy

0

el bloque usando es de hecho la siguiente bajo el capó:

try { 
    (do something unmanaged here) 
} 
finally { 
    unmanagedObject.Dispose(); 
} 

Espero que esto ayude a entender la lógica detrás de la instrucción using.

4

With statement. Por ejemplo:

with open("/temp/abc") as f: 
    lines = f.readlines() 
+0

Esto no es compatible con IDisposable fuera de la caja. Funciona con tipos de python con una rutina __exit__ especificada. –

Cuestiones relacionadas