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ます。

もちろん、aNoneを 2 つの変数にアンパックすることはできません。次のように、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 に答える