0

我正在我的电脑上使用 django 进行测试,如果我在没有 else 的情况下运行代码,则 if 语句为真并且 r1 变量是正确的。

def trovapernome(request, aggregatore, nome):
    url = urllib.urlopen("http://127.0.0.1:8000/media/%s.xml" % (aggregatore))
    richiesta = url.read()
    tree = ET.fromstring(richiesta)
    iterator = tree.getiterator("location")
    t = get_template('prova.xml')           
    for name in tree.iter('name'):
        if name.text.lower() == nome.lower():
            c = Context({'id' : name.text})
            r1 = HttpResponse(t.render(c), mimetype='application/xml')
            return r1

否则这段代码:

def trovapernome(request, aggregatore, nome):
    url = urllib.urlopen("http://127.0.0.1:8000/media/%s.xml" % (aggregatore))
    richiesta = url.read()
    tree = ET.fromstring(richiesta)
    iterator = tree.getiterator("location")
    t = get_template('prova.xml')           
    for name in tree.iter('name'):
        if name.text.lower() == nome.lower():
            c = Context({'id' : name.text})
            r1 = HttpResponse(t.render(c), mimetype='application/xml')
        else:  r1 = HttpResponse(t.render(Context({'id' : 'prova'})), mimetype='application/xml')
    return r1

总是返回 else 语句

4

2 回答 2

1

您正在遍历树中的多个元素。在您的第一个版本中,您在处理第一个元素时立即返回。在第二个版本中,您只有在处理完树中的所有元素后才返回。

从循环内返回或确定需要对多个匹配项执行什么操作:

for name in tree.iter('name'):
    if name.text.lower() == nome.lower():
        c = Context({'id' : name.text})
        r1 = HttpResponse(t.render(c), mimetype='application/xml')
    else:  r1 = HttpResponse(t.render(Context({'id' : 'prova'})), mimetype='application/xml')
    return r1  # return the *first* match.
于 2012-10-29T18:16:54.783 回答
0

您没有在第一个代码块中循环,因为return没有正确缩进。

for name in tree.iter('name'):
    if name.text.lower() == nome.lower():
        c = Context({'id' : name.text})
        r1 = HttpResponse(t.render(c), mimetype='application/xml')
        return r1
 # move return indentation to match here, i.e after the for loop completes

查看return使用时如何在第二个块中匹配else

for name in tree.iter('name'):
    if name.text.lower() == nome.lower():
        c = Context({'id' : name.text})
        r1 = HttpResponse(t.render(c), mimetype='application/xml')
    else:  r1 = HttpResponse(t.render(Context({'id' : 'prova'})), mimetype='application/xml')
return r1
于 2012-10-29T18:18:13.753 回答