TypeError:'NoneType'对象不可迭代 - Python

时间:2013-02-15 05:23:21

标签: python nonetype

我知道之前已经问过这个问题,但我似乎无法让我的工作。有人可以帮我解决这个问题吗?

import sys

class Template:
    def processVariable(self, template, data):
        first = template.find('{{')
        second = template.find('}}')
        second = second + 2
        out = template[first+second]
        assert[out.startswith('{{')]
        out = out.strip('{}')
        rest = template[second:]
        if out in data:
            newstring = data[out]
            return(rest, newstring)
        else:
            print "Invalid Data Passed it"

t = Template()
vars = {
    'name': 'Jane',
    'course': 'CS 1410',
    'adjective': 'shimmering'
}

(rest, out) = t.processVariable('{{name}} is in {{course}}', vars)

这是我得到的错误:

File "template.py", line 28, in <module>
    (rest, out) = t.processVariable('{{name}} is in {{course}}', vars)
TypeError: 'NoneType' object is not iterable

我理解NoneType但是因为我的for循环还是我错过了一些简单的东西?提前谢谢!

我的代码将被传递到一个字段,以便我的老师可以针对它运行代码,它将通过或失败。这就是他的代码将运行的内容:

import Candidate

t = Candidate.Template()
vars = {
    'name': 'Jane',
    'course': 'CS 1410',
    'adjective': 'shimmering'
}

(rest, out) = t.processVariable('{{course}} is {{adjective}}', vars)
print 'rest is: [' + rest + ']'
print 'out is : [' + out + ']

它应该返回的是:

rest is: [ is in {{course}}]
out is : [Jane]

如果有效,它将返回是或否。

2 个答案:

答案 0 :(得分:4)

您没有从else部分返回任何内容,因此您的函数默认返回None

广告当然,您无法将None解压缩为两个变量。尝试从你的其他部分返回一个元组,如下所示:

if out in data:
    newstring = data[out]
    return (rest, newstring)
else:
    print "Invalid Data Passed it"
    return (None, None)

答案 1 :(得分:2)

您的代码中存在错误。

此:

out = template[first+second]
assert[out.startswith('{{')]

应该是:

out = template[first:second]
assert out.startswith('{{')

    else:
        print "Invalid Data Passed it"

应该是:

    else:
        raise ValueError('Invalid data')

此功能已在Python中使用:

from string import Template
t = Template('$name is in $course')

vars = {
    'name': 'Jane',
    'course': 'CS 1410',
    'adjective': 'shimmering'
}

print(t.substitute(vars))

输出:

Jane is in CS 1410