【发布时间】:2012-08-07 19:57:05
【问题描述】:
我有这个代码:
try:
parent_comment = models.Comment.all_objects.get(id=parent_comment_id)
except models.Comment.DoesNotExist:
parent_comment = None
if parent_comment is not None and parent_comment_id is None:
raise Exception("WTF django/mysql")
...有时,异常会以某种方式引发。这怎么可能发生?
偶尔,一天几次,它返回看似随机的 Comment 实例。通常它的行为符合预期并返回 None。
这是 Comment 表的 id 字段:id int(11) NOT NULL AUTO_INCREMENT 所以它不是可以为空的。这是一个 InnoDB 表。
对于 Comment.all_objects,这是它的定义:all_objects = Manager(),它是该类的第一行。
我们使用的是 Django 1.2.7。
更新 向异常添加了日志记录,以获取引发异常时生成的 SQL。这里是:
SELECT `canvas_comment`.`id`, `canvas_comment`.`visibility`, `canvas_comment`.`parent_content_id`, `canvas_comment`.`parent_comment_id`, `canvas_comment`.`timestamp`, `canvas_comment`.`reply_content_id`, `canvas_comment`.`reply_text`, `canvas_comment`.`replied_comment_id`, `canvas_comment`.`category_id`, `canvas_comment`.`author_id`, `canvas_comment`.`title`, `canvas_comment`.`ip`, `canvas_comment`.`anonymous`, `canvas_comment`.`score`, `canvas_comment`.`judged`, `canvas_comment`.`ot_hidden` FROM `canvas_comment` WHERE `canvas_comment`.`id` IS NULL
【问题讨论】:
-
第 5 行的 parent_comment_id 是在哪里定义的?我在你的代码中找不到它。
-
@sza 这无关紧要 - 我问的是如何引发异常,当 parent_comment_id 为 None 时会发生这种情况。
-
好的。但是如果你之前没有定义它或者给它赋值,它肯定是None。您可以粘贴与 parent_comment_id 分配相关的代码吗?谢谢!
-
@sza python 不能那样工作 - 如果它之前没有定义过,它会引发 NameError 异常。
-
@sza 因为其他原因不能。
标签: python mysql django django-models innodb