Django的Try Except无效
我有这段代码,
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
异常扩展出来的。
另外,最好的做法是只在你预期会出错的那一行代码周围使用 try
… except
。用更符合 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,但这只是个人的选择。其实还有很多不错的选择。