【问题标题】:TypeError: 'NoneType' object is not iterable - PythonTypeError:“NoneType”对象不可迭代 - Python
【发布时间】:2013-02-15 05:23:20
【问题描述】:

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

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]

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

【问题讨论】:

  • 我在那里看不到任何 for 循环。你发布了完整的代码吗?
  • 我的意思是 if 语句...对不起

标签: python nonetype


【解决方案1】:

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

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

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

【讨论】:

  • 明白了!所以我做出了改变,现在我收到了这个错误:无效的数据传递了它
  • 你在哪里使用返回的元组?另外,你到底想做什么?
  • @NickMcArthur。好吧,好像没事。您只会收到您在其他部分打印的消息。并且您的函数返回 (None, None) 元组。尝试在函数调用后打印变量restout的值。
  • 感谢您的帮助!我很感激!
【解决方案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

【讨论】:

  • 非常感谢!就是这样!
猜你喜欢
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 2011-04-22
相关资源
最近更新 更多