反序列化错误:调用Python obj时超出了最大递归深度

2024-10-03 15:33:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将fixture加载到我的Django(1.4)应用程序中,方法是将带有数据的csv转换成json文件,然后用loaddata将这些csv输入Django。但我一直得到最大递归深度错误。我到处看看,它似乎与json文件中的非ASCII字符有关。不过,我肯定我不会那么做的?我的代码是:

    def csv_to_json(self,csv,dest,model,keys,sub):
    #keys is a dict formatted x:f where x = index of value v;
    #don't include pk
    with open(csv) as f:
        l = f.readlines()
    right = len(l[0].split(","))
    out = []
    for x in xrange(1,len(l)):
        if sub:
            line = re.sub(", "," ",l[x])
        line = re.sub(r'(,[\'\"*.]+|[\'\"*.]+,)','',l[x])
        line = unicodedata.normalize('NFKD',unicode(line,'utf-8','ignore')).encode('ASCII','ignore')
        line.encode('ASCII')
        splt = line.split(",")
        print len(splt) 
        if len(splt) == right:
            for y in xrange(len(splt)):
                if re.match(r'\d{4}-\d{2}-\d{2}',str(splt[y])):
                    splt[y] = int(splt[y][:4])
                try:
                    if splt[y].isupper():
                        splt[y] = splt[y].title()
                    splt[y] = splt[y].rstrip()
                except AttributeError:
                    continue
                try:    
                    splt[y] = int(splt[y])
                except ValueError:
                    try:
                        splt[y] = float(splt[y])
                    except ValueError:
                        continue

            d = {}
            d["model"] = "dishes.%s"%(model)
            d["pk"] = splt[0]
            d["fields"] = {}
            for k,v in keys.items():
                print v,k
                try:
                    d["fields"][v] = splt[k]
                except IndexError:
                    continue
            out.append(d)
    with open(dest,"w") as f:
        json_out = simplejson.dump(out,f,separators=(",",":"))

如您所见,我将csv的内容简短地转换为UTF-8,目的是使用unicodedata清除它们的音调符号(我不得不这样做,因为当我试图用loaddata加载csv时,我收到了“无效的连续字符”消息),但是我将把所有内容都转换回ASCII。还是我?如果我是,那么是什么导致递归问题?在

ETA:以下是完整的错误消息:

^{pr2}$

重新编辑以进一步添加: 下面是我试图加载的一个JSON文件的片段。在

[
{
    "pk":1,
    "model":"dishes.dish",
    "fields":{
        "name":"Consomme printaniere royal"
    }
},
{
    "pk":2,
    "model":"dishes.dish",
    "fields":{
        "name":"Chicken gumbo"
    }
},
{
    "pk":3,
    "model":"dishes.dish",
    "fields":{
        "name":"Tomato aux croutons"
    }
},
{
    "pk":4,
    "model":"dishes.dish",
    "fields":{
        "name":"Onion au gratin"
    }
},
{
    "pk":5,
    "model":"dishes.dish",
    "fields":{
        "name":"St. Emilion"
    }
},
{
    "pk":7,
    "model":"dishes.dish",
    "fields":{
        "name":"Radishes"
    }
},
{
    "pk":8,
    "model":"dishes.dish",
    "fields":{
        "name":"Chicken soup with rice"
    }
},
{
    "pk":9,
    "model":"dishes.dish",
    "fields":{
        "name":"Clam broth (cup)"
    }
},
{
    "pk":11,
    "model":"dishes.dish",
    "fields":{
        "name":"Clear green turtle"
    }
},
{
    "pk":13,
    "model":"dishes.dish",
    "fields":{
        "name":"Anchovies"
    }
},
{
    "pk":14,
    "model":"dishes.dish",
    "fields":{
        "name":"Fresh lobsters in every style"
    }
},
{
    "pk":15,
    "model":"dishes.dish",
    "fields":{
        "name":"Celery"
    }
},
{
    "pk":16,
    "model":"dishes.dish",
    "fields":{
        "name":"Pim-olas"
    }
},
{
    "pk":17,
    "model":"dishes.dish",
    "fields":{
        "name":"Caviar"
    }
},
{
    "pk":18,
    "model":"dishes.dish",
    "fields":{
        "name":"Sardines"
    }
},
{
    "pk":19,
    "model":"dishes.dish",
    "fields":{
        "name":"India chutney"
    }
},
{
    "pk":20,
    "model":"dishes.dish",
    "fields":{
        "name":"Pickles"
    }
},
{
    "pk":21,
    "model":"dishes.dish",
    "fields":{
        "name":"English walnuts"
    }
},
{
    "pk":22,
    "model":"dishes.dish",
    "fields":{
        "name":"Pate de foies-gras"
    }
},
{
    "pk":23,
    "model":"dishes.dish",
    "fields":{
        "name":"Pomard"
    }
},
{
    "pk":26,
    "model":"dishes.dish",
    "fields":{
        "name":"Clams"
    }
},
{
    "pk":27,
    "model":"dishes.dish",
    "fields":{
        "name":"Oysters"
    }
},
{
    "pk":28,
    "model":"dishes.dish",
    "fields":{
        "name":"Claremont planked shad"
    }
},
...

编辑三:节日快乐!我只是将其中一个JSON文件的一个小片段粘贴到一个单独的文件中,通过JSONLint运行它来确定,然后将它传递给loaddata……我得到了同样糟糕的错误消息。我的模特会不会有问题?在

编辑4:所以我尝试将数据编码为YAML而不是JSON,但是没有成功。伙计们,我真的被难住了。有人请帮忙!在

编辑5:我甚至尝试将我的数据库后端更改为django mysql pymysql(http://pypi.python.org/pypi/django mysql pymysql/0.1)但那也没用。有人吗?拜托?在


Tags: 文件csvnameinjsonfieldsmodellen
1条回答
网友
1楼 · 发布于 2024-10-03 15:33:38

结果,问题是我的模型中有一个名为“pk”的字段,其中“primary_key=True”。如果有一个Django的“保留字”列表就好了,因为我的错误似乎很容易犯,而且在不使用shell进行调试的情况下,很难捕捉到。我还遇到了以“_id”结尾的手动定义字段的问题,AFAIK,这也没有记录在案。在

相关问题 更多 >