我知道之前已经问过这个问题,但我似乎无法让我的工作。有人可以帮我解决这个问题吗?
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]
如果有效,它将返回是或否。
答案 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