'异常。类型错误'执行python scrip时

2024-04-20 05:35:59 发布

您现在位置:Python中文网/ 问答频道 /正文

执行以下脚本时出现以下错误:

Error Type: <type 'exceptions.TypeError'>
Error Contents: 'NoneType' object is not iterable
Traceback (most recent call last):
File "addon.py", line 75, in <module>
plugin.run()
File "xbmcswift2/plugin.py", line 332, in run
items = self._dispatch(self.request.path)
File "/plugin.py", line 306, in _dispatch
listitems = view_func(**items)
File "/addon.py", line 42, in all_episodes
items = thisiscriminal.compile_playable_podcast(playable_podcast)
File "/lib/thisiscriminal.py", line 121, in compile_playable_podcast
for podcast in playable_podcast:
TypeError: 'NoneType' object is not iterable

问题代码如下,如有任何建议,我将不胜感激,因为我不知道我做错了什么:

def get_playable_podcast(soup):
    """
    @param: parsed html page            
    """
    r    = urllib.urlopen('https://thisiscriminal.com/wp-json/criminal/v1/episodes?posts=10000&page=1')
    data = json.loads(r.read().decode('utf-8'))

    for post in data['posts']:

          print post['title']
          print post['episodeNumber']
          print post['audioSource']
          print post['image']['medium']

          subjects = []

          item = {
                'title': post['title'],
                'audioSource': post['audioSource'],
                'episodeNumber': post['episodeNumber'],
                'medium': post['image']['medium']
          }

          subjects.append(item)

          print subjects

def compile_playable_podcast(playable_podcast):
    """
    @para: list containing dict of key/values pairs for playable podcasts
    """
    items = []

    for podcast in playable_podcast:
        items.append({
            post['title']: podcast['title']['episodeNumber'],
            post['audioSource']: podcast['audioSource'],
            post['image']['medium']: podcast['medium'],
            'is_playable': True,})

    return items

Tags: inpyfortitleislineitemspost
1条回答
网友
1楼 · 发布于 2024-04-20 05:35:59

我猜你的剧本跟下面的一样

podcast = get_playable_podcast(soup)
compiled = compile_playable_podcast(podcast)

问题是get_playable_podcast没有return语句。在这种情况下,Python defaults to returning ^{}-然后传递到compile_playable_podcast。因为None是不可iterable的,所以compile_playable_podcast正确地引发了TypeError。你知道吗

现在,解决方案当然是返回您在get_playable_podcast中构建的播客列表,如下所示

def get_playable_podcast(soup):
    """
    @param: parsed html page            
    """
    r    = urllib.urlopen('https://thisiscriminal.com/wp-json/criminal/v1/episodes?posts=10000&page=1')
    data = json.loads(r.read().decode('utf-8'))

    subjects = []

    for post in data['posts']:

          print post['title']
          print post['episodeNumber']
          print post['audioSource']
          print post['image']['medium']

          item = {
                'title': post['title'],
                'audioSource': post['audioSource'],
                'episodeNumber': post['episodeNumber'],
                'medium': post['image']['medium']
          }

          subjects.append(item)

          print subjects

    return subjects

除此之外,还需要仔细检查脚本中是否有未使用的参数和/或重复的代码。你知道吗

相关问题 更多 >