我正在使用get_or_create,因为我遍历CSV文件将其读入数据库。启用日志记录后,我使用对象,创建元组来记录它在日志文件中是如何相处的 - 所有这些都是大多数的时间,除了偶尔它会在'创建时抛出'tuple对象'不可调用' '由get_or_create返回的变量。它在它抛出的位置似乎并不一致 - 如果我在同一个文件上运行相同的代码,有时它会超过它并且工作正常,有时它会粘在(不同的)早期行的CSV上。
编辑:当我调用'created'时错误就会消失 - 例如,在logger.debug(office.name
部分。
作为一种解决方法,我有一个小问题,作为'except'函数的一部分,重试相同的get_or_create。这个后备工作正在发挥作用,并且还没有例外(我的记录高达67k,并且它会产生不同的错误),但它是一个笨拙的工作,而且非常简单。我宁愿修复基本问题 - 感觉get_or_create是默默失败的,这意味着元组被破坏了,但我找不到任何证据;当然如果是这样的话,会抛出一个异常的(sp?)错误。 (没有重复会导致MultipleObjectsReturned,并且我无论如何都没有得到异常。)
Tl; dr - get_or_create可以99%的时间工作,并且如果我放弃后退,但不会以有用的方式失败。
建议热烈欢迎。
代码如下:
try:
office, created = Office.objects.get_or_create(name=office_name)
logger.debug(office)
logger.debug(created)
if created:
logger.info("Office added to database:")
logger.info(office.name)
else:
logger.info("Office already exists:")
logger.info(office.name)
except: #catchall exception for now
logger.error("Could not create: %s", office_name)
office, created = Office.objects.get_or_create(name=office_name)
if created:
logger.info("Office added to database:")
logger.info(str(office.name))
else:
logger.info("Office already exists:")
logger.info(str(office.name))
return office
return office
回溯(仅限日志,道歉):
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py", line 112, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/~/Django/OMS/core/views.py", line 28, in loadinitialstats
load_stats_from_csv(location)
File "/Users/~/Django/OMS/core/filehandling.py", line 139, in load_stats_from_csv
home_office = fetch_or_create_office(row[2])
File "/Users/~/Django/OMS/core/filehandling.py", line 13, in fetch_or_create_office
logger.info(created)
TypeError: 'tuple' object is not callable
答案 0 :(得分:1)
我认为你对这个问题的诊断是错误的。错误告诉您元组不是可调用的。记录某些内容并不意味着调用它,而created
不是一个元组(它是一个bool)。
我怀疑你的代码中某处你不小心做了这样的事情:
logging.info = my_tuple
而不是
logging.info(my_tuple)
导致info
从该点开始引用元组,而不是原始方法。