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 回答