1

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

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]

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

4

2 回答 2

5

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

当然,您不能将 a 解压缩None为两个变量。尝试从 else 部分返回一个元组,如下所示:

if out in data:
    newstring = data[out]
    return (rest, newstring)
else:
    print "Invalid Data Passed it"
    return (None, None)
于 2013-02-15T05:27:12.680 回答
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
于 2013-02-15T05:38:07.300 回答