Django的Try Except无效

3 投票
2 回答
30899 浏览
提问于 2025-04-17 03:15

我有这段代码,

    try:
        print "what"
        newClassName = CourseNameAndCodeAssociation.objects.get(departmentCode__iexact =         nameAndNumberStore[0])
        print newClassName  
    except:
        print "HAHA"

这段代码总是打印“HAHA”,尽管我在控制台运行了 newClassName = ... 的代码,并且它是有效的。

这是为什么呢?

补充说明

def newGetAllInformation(searchTerm):
nameAndNumberStore = modifySearchTerm(searchTerm)
urlStore = modifyUrl(nameAndNumberStore) # need to make the change here -- why not I go to the site, check for Course name - if that is not there switch, if it is  then scrape 
soup = getHtml(urlStore) 
storeOfBooks = []
storeOfBooks = scrape(soup,nameAndNumberStore)
print nameAndNumberStore[0]
try:
    newClassName = CourseNameAndCodeAssociation.objects.get(departmentCode__iexact = nameAndNumberStore[0])
    nameAndNumberStore = modifySearchTerm(newClassName.departmentName + " " + nameAndNumberStore[1])
    urlStore = modifyUrl(nameAndNumberStore)
    soup = getHtml(urlStore)
    storeOfBooks = scrape(soup,nameAndNumberStore)

except:
    print "HAHA"

return storeOfBooks

补充说明

经过进一步调查,也就是手动输入有效代码(结果是有效的),我觉得从数组中获取代码可能有问题——尽管这两者的数据类型都是字符串。

所以 newClassName = CourseNameAndCodeAssociation.objects.get(departmentCode__iexact = "econ") 从文件中运行是有效的,但 newClassName = CourseNameAndCodeAssocition.objects.get(departmentCode__iexact = nameAndNumberStore[0]) 就不行,其中 nameAndNumberStore[0] 存储的是econ

2 个回答

2

把它改成:

except CourseNameAndCodeAssociation.DoesNotExist:

你创建的每个模型都有自己的 DoesNotExist 异常,这个异常是从核心的 ObjectDoesNotExist 异常扩展出来的。

另外,最好的做法是只在你预期会出错的那一行代码周围使用 tryexcept。用更符合 Python 风格的方式来写你现在的代码可以是:

department_code = name_and_number_store[0]
class_names = CourseNameAndCodeAssociation.objects.all()
try:
    new_class_name = class_names.get(departmentCode__iexact=department_code)
except CourseNameAndCodeAssociation.DoesNotExist:
    print "HAHA"
else:
    search_term = u'%s %s' % (new_class_name.departmentName,
                              name_and_number_store[1])
    name_and_number_store = modify_search_term(search_term)
    url_store = modify_url(name_and_number_store)
    soup = get_html(url_store)
    store_of_books = scrape(soup, name_and_number_store)

请注意,Python 中的约定是变量、属性和函数名使用 lowercase_underscored_names 的格式,而类名则使用 CamelCaseNames 的格式(实例名可以是变量或属性)。

10

请把代码改成这样,运行一下,然后告诉我们你遇到了什么异常:

try:
    print "what"
    newClassName = CourseNameAndCodeAssociation.objects.get(departmentCode__iexact =         nameAndNumberStore[0])
    print newClassName  
except Exception as e:
    print "HAHA"
    print e

另外,最好在你的电脑上安装一个调试工具。我推荐使用Eclipse配合PyDev,但这只是个人的选择。其实还有很多不错的选择。

Eclipse IDE - 下载基本的Java版本,大约120MB

然后在它上面安装这个插件 - PyDev

撰写回答