La fermeture d'un cx_Oracle de Connexion, Tout en Permettant une mise de Base de données

Suivantes cx_Oracle code fonctionne très bien lorsque la base de données est:

#!C:\Python27
import cx_Oracle

try:
    conn = cx_Oracle.connect("scott/tiger@oracle")

    try:
        curs = conn.cursor()
        curs.execute("SELECT dummy FROM sys.dual")
        print curs.fetchone()[0]
    finally:
        curs.close()
finally:
    conn.close()

Mais si la base de données se trouve être vers le bas lorsque j'exécute ce script, un NameError est soulevée:

Traceback (most recent call last):
  File "C:\Users\ArtMetzer\Documents\Code\Python\db_conn_test.py", line 14, in <module>
    conn.close()
NameError: name 'conn' is not defined

Cela fait sens pour moi: cx_Oracle n'était pas en mesure d'instancier une connexion, de sorte que la variable conn ne l'ai jamais mis, et n'a donc aucun close() méthode.

En Python, quelle est la meilleure façon de vous assurer de votre connexion de base de données se ferme, tandis que toujours gracieusement de la manipulation de l'état d'une baisse de la base de données?

De faire quelque chose comme ce qui suit semble comme un énorme bidouille pour moi:

finally:
    try:
        conn.close()
    except NameError:
        pass

OriginalL'auteur Art Metzer | 2011-03-09