He siguiente código en un script en Pythoncierre de archivos correctamente abrieron con urllib2.urlopen()
try:
# send the query request
sf = urllib2.urlopen(search_query)
search_soup = BeautifulSoup.BeautifulStoneSoup(sf.read())
sf.close()
except Exception, err:
print("Couldn't get programme information.")
print(str(err))
return
Me preocupa porque si encuentro un error en sf.read()
, entonces sf.clsoe()
no se llama. He intentado poner sf.close()
en un bloque finally
, pero si hay una excepción en urlopen()
entonces no hay archivo para cerrar y me encuentro con una excepción en el bloque finally
!
Entonces me trataron
try:
with urllib2.urlopen(search_query) as sf:
search_soup = BeautifulSoup.BeautifulStoneSoup(sf.read())
except Exception, err:
print("Couldn't get programme information.")
print(str(err))
return
pero esto eleva un error de sintaxis no válida en la línea de with...
. ¿Cómo puedo manejar esto mejor, me siento estúpido?
Como comentaristas han señalado, estoy usando PyS60 que es Python 2.5.4
La declaración "con" solo está disponible en Python 2.6, o en 2.5 si coloca 'from __future__ import with_statement' en la parte superior de su archivo. No recuerdo bien qué Python versión PyS60 implementa pero podría ser 2.5? –
es 2.5.4. la importación es un buen punto :) – Habbie