2012-04-04 2 views
4

J'essaie d'écrire dans un fichier mais cela ne fonctionne pas. Je suis allé pas à pas avec le débogueur (il va à la commande d'écriture mais quand j'ouvre le fichier c'est vide). Ma question est soit: "Comment puis-je voir quelle est l'erreur pour que je puisse déboguer?", "Qu'est-ce qui peut mal se passer quand on essaye d'écrire dans un fichier pour qu'il se comporte comme ça?".Impossible d'écrire dans le fichier mais génère aucune erreur

sqlScript = open('script-file.sql', 'a') 

    try: 
     sqlScript.write(sqlLine) 
    except IOError as (errno, strerror): 
     print "I/O error({0}): {1}".format(errno, strerror) 

Cela devrait être simple, mais je n'arrive pas à trouver une réponse. Aussi, je m'excuse d'avance car l'anglais est une deuxième langue. Editer: Je mets une instruction print juste avant et la chaîne n'est pas vide.
Edit2: J'utilise python 2.6 si cela compte d'une manière ou d'une autre.

Édition 3: J'ai trouvé une "solution" à mon erreur. J'ai décidé d'essayer et d'exécuter mon script en utilisant IDLE au lieu de PyCharm et cela fonctionne comme un charme (jeu de mots). Je n'ai aucune idée de pourquoi, mais il est là. Une raison pour laquelle cela arriverait ?!

+1

Qu'est-ce que voulez-vous dire par "ça ne marche pas"? Génère-t-il l'exception que vous attrapez? Ou aucune exception n'est-elle générée? – alan

+0

Avez-vous fermé ou purgé le fichier dans le processus Python avant de l'inspecter? –

+0

Alan: Cela ne génère pas d'erreur. Larsmans: Je l'ouvre seulement pour l'ajouter. – Boona

Répondre

2

Le code suivant vous permet de voir quelle exception est lancée, et de voir une trace de son origine.

try: 
    sqlScript.write(sqlLine) 
except: 
    print "Unexpected error:", sys.exc_info()[0] 
    raise 

Voir http://docs.python.org/tutorial/errors.html pour plus d'informations.

+0

J'ai utilisé votre code et je n'ai pas d'erreur. C'est vraiment étrange. – Boona

+0

@Boona Etes-vous sûr? Cela semble plutôt bizarre. Aucun message d'erreur inattendue n'apparaît sur votre console? –

0

Si aucune exception n'est lancée, je suspecterais que la variable de chaîne 'sqlLine' est vide.

L'avez-vous imprimé avant l'instruction d'écriture?

+0

J'ai mis une instruction d'impression juste avant et la chaîne n'est pas vide. – Boona

4

Miser sur la réponse de Chris Morris, peut-être faire quelque chose comme ceci:

try: 
    sqlScript.write(sqlLine) 
except Exception as e: 
    print type(e) 
    print str(e) 

Ce attrapera une exception jetée (à condition qu'il soit une sous-classe de Exception, bien sûr) et vous dire le type et le message d'erreur .

De même, il est possible de définir plusieurs cas except: pour différentes exceptions possibles, donc essayez peut-être de le faire pour chaque exception potentiellement levée/levée.

+0

Merci pour votre aide, mais toujours pas d'erreur. – Boona

0

Les mots-clés du script sont-ils en minuscules? La même chose m'est arrivée dans un autre DB et je l'ai résolu en changeant les mots en MAJUSCULES.

+0

Je n'ai même pas la chance d'exécuter le script puisque je ne peux pas l'écrire dans le fichier. : P (Remarque: je n'écris pas directement dans la base de données mais génère un script qui sera exécuté ultérieurement.) – Boona

+0

Pouvez-vous afficher quelque chose à partir du contenu de sqlLine? –

+0

Je viens de trouver le problème. Quand j'ai essayé de le lancer avec IDLE au lieu de PyCharm cela a fonctionné. Je ne sais pas pourquoi. : P – Boona

0

Votre répertoire de travail actuel n'est pas ce que vous attendiez et il écrit avec succès dans certains script-file.sql dans un autre répertoire. Essayez d'imprimer os.getcwd() et assurez-vous que c'est ce que vous attendez, et regardez dans ce répertoire.

+0

Intéressant! J'ai vérifié et c'est le répertoire que je m'attendais. – Boona

0

Il est arrivé sur mon environnement linux, mais le travail sur les fenêtres essayer

sqlScript = open('script-file.sql', 'a', buffering=False) 

ou

sqlScript = open('script-file.sql', 'a', 0) 
Questions connexes