6

ファイルに書き込もうとしていますが、うまくいきません。デバッガーを使用して段階的に実行しました (書き込みコマンドに移動しますが、ファイルを開くと空になります)。

私の質問は、「デバッグできるようにエラーを確認するにはどうすればよいですか?」、「このように動作する原因となるファイルに書き込もうとすると、何が問題になる可能性がありますか?」です。

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 を使用してスクリプトを実行してみることにしましたが、それは魅力のように機能します (しゃれが意図されています)。理由はわかりませんが、そこにあります。それが起こる理由は何ですか?

4

7 に答える 7

4

クリスモリスの答えに基づいて、多分このようなことをしてください:

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

これにより、スローされた例外がキャッチされ(もちろん、のサブクラスであるException場合)、タイプとエラーメッセージが通知されます。

また、考えexcept:られるさまざまな例外に対して複数のケースを定義することも可能であるため、スロー/発生する可能性のある例外ごとに定義してみてください。

于 2012-04-04T19:36:39.540 に答える
2

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

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

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

于 2012-04-04T19:32:55.823 に答える
1

ファイルの先頭にカーソルを置く必要があります。メソッドでそれを行うことができますseek

myScript.seek(0)

この回答を参照してください: https://stackoverflow.com/a/2949648/2119117

于 2014-10-24T10:23:09.813 に答える
0

例外がスローされていない場合は、文字列変数「sqlLine」が空であると思われます。

writeステートメントの前に印刷しましたか?

于 2012-04-04T19:35:25.870 に答える
0

スクリプト内のキーワードは小文字ですか? 同じことが別のデータベースで発生し、単語を大文字に変更して解決しました。

于 2012-04-04T19:58:41.673 に答える
0

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

于 2012-04-04T19:59:43.153 に答える
0

それは私のLinux環境で起こりましたが、Windowsで試してみてください

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

また

sqlScript = open('script-file.sql', 'a', 0)
于 2016-11-18T21:00:44.283 に答える