14

エラーをデバッグしようとしています。最初に実行したときに「例外が提供されていません」と表示され、後で try/except ブロックに入れてエラーの内容を出力しました。

try:
    #some code
except BaseException, e:
    print str(e)

これにより、出力の空白行が生成されます。何か考えはありますか?

編集:申し訳ありませんが、エラーメッセージが空白になる特定の理由があることを望んでいました. 最初に try/except ブロックを実行することを余儀なくされた原因であるスタック トレース出力はありません。私はまだこのことをプログラミングしているので、今のところ「コンパイラ」にエラーをキャッチさせています。エラーをスローしている実際のコードは Django アプリにあるため、Django の関数がいくつか含まれています。

try:
    if len(request.POST['dateToRun']) <= 0:
        dateToRun = Job.objects.filter(id=jobIDs[i]).values()['whenToRun'].split(' ')[0]
    if len(request.POST['timeToRun']) <= 0:
        timeToRun = Job.objects.filter(id=jobIDs[i]).values()['whenToRun'].split(' ')[1]
except BaseException, e:
    print str(e)

これはビュー関数のコードです。jobIDs は、##Selection: ## (つまり、17Selection: 17) の形式の値キー ペアを含む辞書です。申し訳ありませんが、最初にこれを投稿するのを忘れていました。

編集: repr(e) は TypeError() を与えてくれました。これは何も知らないよりはましです。

4

4 に答える 4

19

これは、例外にメッセージが添付されていないことを意味します。例外タイプを出力します。

print repr(e)

トレースバックを印刷することもできます:

import traceback

# ...
except BaseException as e:
    traceback.print_exc()

あなたはキャッチを避けBaseExceptionたいと思っていますが、これはブランケットexcept:ステートメントに勝るものはありません. 代わりに、より具体的な例外をキャッチしてください。

于 2013-06-18T20:25:32.560 に答える
7

次の例では、出力の空白行が生成されます。

try:
    raise Exception()
except BaseException, e:
    print str(e)

repr(e)発生した例外を確認するために使用します。

于 2013-06-18T20:25:24.673 に答える
4

使用してみてください:

try:
    #code
except BaseException as e:
    print str(e)

これが一番分かりやすく、かつ感動的です。

于 2013-06-18T20:28:30.617 に答える
1

問題のある行が見つかるまで、コードの小さなセクションの周りに try/except ブロックを置きます。たとえば、次の場合:

try:
    a = fn(b)
    c = fn(a)
except BaseException, e:
    print str(e)

次に、次のように変更します。

a = fn(b)
try:
    c = fn(a)
except BaseException, e:
    print str(e)
于 2013-06-18T20:25:56.540 に答える