2012-04-04 30 views
4

ファイルに書き込もうとしていますが、動作しません。私はデバッガを段階的に実行しました(書き込みコマンドに行きますが、ファイルを開くと空になります)。ファイルへの書き込みに失敗しましたが、エラーは発生しません。

私の質問は、「どのようにエラーが表示され、デバッグできるのですか」、「ファイルにこのように振る舞う原因となるものは何か?

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

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

これは単純なはずですが、回答が見つからないようです。また、英語は第二言語であるため、事前にお詫び申し上げます。

編集:私はprint文を直前に置き、文字列は空ではありません。
Edit2:私はPython 2.6を使用しています。

編集3:私のエラーに対する「解決策」が見つかりました。私は、PyCharmの代わりにIDLEを使ってスクリプトを実行しようと決心しました。これは魅力的なもの(意図した言い訳)のように機能します。私は理由を知りませんが、そこにはあります。それが起こる理由は何か?

+1

何を試してみてください「それは働いていない」という意味ですか?あなたが捕まえている例外が生成されますか?それとも、例外が生成されていませんか? – alan

+0

ファイルを検査する前に、Pythonプロセスでファイルを閉じたり、フラッシュしたりしましたか? –

+0

Alan:エラーは発生しません。 Larsmans:私は追加するためにそれを開くだけです。 – Boona

答えて

2

次のコードを使用すると、スローされている例外を確認し、発生元のトレースを確認できます。

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

詳細については、http://docs.python.org/tutorial/errors.htmlを参照してください。

+0

あなたのコードを使用しましたが、エラーは発生しません。それは本当に奇妙です。 – Boona

+0

@Boona本当ですか?それはかなり奇妙に思える。あなたのコンソールに「予期しないエラー」というメッセージは表示されませんか? –

0

例外が投げられていない場合は、文字列変数 'sqlLine'が空であると思われます。

書き込みステートメントの前に印刷しましたか?

+0

私はprint文を直前に置いて、文字列は空ではありません。 – Boona

4

クリス・モリスの答えのビル、おそらくこのような何か:

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

これは(それはもちろん、Exceptionのサブクラスです提供)スローされた例外をキャッチし、あなたのタイプと、エラーメッセージを教えてくれます。

また、可能性のある例外ごとに複数のケースを定義することも可能です。したがって、投げられる可能性のある例外ごとに試してみてください。

+0

助けていただきありがとうございますが、エラーはありません。 – Boona

0

スクリプト内のキーワードは小文字ですか?他のデータベースでも同じことが起こりました。大文字に変更することで解決しました。

+0

スクリプトに書き込むことができないので、スクリプトを実行する機会はありません。 :P(注:DBに直接書き込むのではなく、後で実行されるスクリプトを生成しています) – Boona

+0

sqlLineの内容から何かを表示できますか? –

+0

私はこの問題を発見しました。私がPyCharmの代わりにIDLEを使って実行しようとしたとき、それはうまくいった。なぜ私は考えていない。 :P – Boona

0

あなたの現在の作業ディレクトリは期待通りではなく、別のディレクトリのscript-file.sqlに書き込んでいます。 os.getcwd()を印刷して、期待どおりのものであることを確認し、そのディレクトリを見てください。

+0

興味深い!私はチェックして、私が期待していたディレクトリです。 – Boona

1

ファイルの先頭にカーソルを置く必要があります。

myScript.seek(0) 
この回答を参照してください:あなたは seek方法でそれを行うことができますこれは、Windows上で私のLinux環境が、仕事上で起こっ https://stackoverflow.com/a/2949648/2119117

0

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

または

sqlScript = open('script-file.sql', 'a', 0) 
関連する問題