类型错误:'NoneType'对象不可迭代 - Python

1 投票
2 回答
23646 浏览
提问于 2025-04-17 15:57

我知道这个问题之前有人问过,但我就是搞不定。有人能帮我一下吗?

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 个回答

5

你在else部分没有返回任何东西,所以你的函数默认会返回None

当然,你不能把None拆分成两个变量。试着在你的else部分返回一个元组,像这样:

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

你的代码里有错误。

这个:

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

撰写回答