6
votes

Impossible d'écrire dans le fichier mais ne génère aucune erreur

J'essaie d'écrire dans un fichier, mais cela ne fonctionne pas. Je suis passé par étape avec le débogueur (il va à la commande écriture mais quand j'ouvre le fichier, il est vide).

Ma question est soit: "Comment puis-je voir quelle est l'erreur que je peux Déboguer? "," Que peut vous tromper en essayant d'écrire dans un fichier qui lui causerait de cette façon? ". P>

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

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


5 commentaires

Que voulez-vous dire par "ça ne marche pas"? Génère-t-il l'exception que vous attrapez-vous? Ou n'est pas généré une exception?


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


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


Est-ce votre code actuel? Compte tenu de la mauvaise indentation, je soupçonne pas et que quelque chose d'autre l'affecte. Avez-vous essayé d'exécuter votre code exactement comme il est affiché ici (définir SQLLINE une valeur vous-même)? Ce pourrait être le problème mensonges ailleurs. Vous devriez également examiner Le avec Déclaration pour écrire des fichiers ( avec Open ("script-fichier.sql ',' a ') comme sqlscript: ).


C'est le code réel (seulement j'ai changé le nom du fichier car il est le nom d'un client.) Il n'a pas gardé mon indentation quand je l'ai copié, alors je mets des espaces moi-même.


7 Réponses :


2
votes

Le code suivant vous permet de voir quelle exception est-elle jetée et de voir une trace de l'endroit où elle est originaire.

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


2 commentaires

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


@Boona êtes-vous sûr? Cela semble assez étrange. Aucune messagerie «erreur inattendue» apparaît sur votre console?



0
votes

Si aucune exception n'est lancée, je soupçonnerais que la variable de chaîne 'sqlline' est vide.

l'avez-vous imprimé avant la déclaration d'écriture?


1 commentaires

Je mettais une déclaration d'impression juste avant et la chaîne n'est pas vide.



4
votes

bâtiment sur la réponse de Chris Morris, peut-être faire quelque chose comme ceci: XXX

Ceci va attraper une exception lancée (à condition que c'est une sous-classe de Exception , bien sûr ) et vous dire le type et le message d'erreur.

En outre, il est possible de définir plusieurs sauf: cas pour différentes exceptions possibles, essayez peut-être de faire cela pour chaque exception être potentiellement jeté / élevé.


0 commentaires

0
votes

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


2 commentaires

Je n'ai même pas la chance de lancer le script car je ne peux pas l'écrire au fichier. : P (Remarque: Je n'écris pas directement à la DB mais que générer un script qui sera exécuté à une date ultérieure.)


Je viens de trouver le problème. Quand j'ai essayé de l'exécuter avec oisif au lieu de Pycham, cela fonctionnait. Je ne sais pas pourquoi. : P



0
votes

Votre répertoire de travail actuel n'est pas ce que vous attendez qu'il soit et qu'il écrit avec succès à certains script-file.sql dans un autre répertoire. Essayez l'impression os.gecwd () et assurez-vous que c'est ce que vous attendez et regarde dans ce répertoire.


1 commentaires

Intéressant! J'ai vérifié et c'est l'annuaire que je m'attendais.



1
votes

Vous devez mettre votre curseur au début du fichier. Vous pouvez le faire avec rechercher méthode: xxx

voir cette réponse: https://stackoverflow.com/a/2949648/2119117


0 commentaires

0
votes

C'est arrivé sur mon environnement Linux mais travaillez sur Windows Essayez

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


0 commentaires