TypeError:“NoneType”对象不可iterable,Python

2024-04-28 23:34:58 发布

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

最近几天我发了一些帖子,谢谢你到目前为止的帮助,感谢你帮助了一个初学者。

抬头看,我知道下面的代码看起来非常基本,可能有一个更简单和更优雅的方法来实现我的尝试,但现在这是基本的我可以学习和实际理解的程度哈哈。

只是想知道是否有人真的能告诉我错误是由什么引起的,在程序输出上,它似乎有时运行正常,但由于这个错误而失败,可能是3个错误中的2个。

这仍然是一个正在进行的项目,主要目的是创建一个程序,我可以自动化的东西,我手动作为一个学习环境。

谢谢你的洞察力。

程序输出

Beginning Mining
Opener Created
Opener Headers Added
Url Assigned
HTTP Error 503: Service Temporarily Unavailable
1
Opener Created
Opener Headers Added
Url Assigned
Page Open and Read
90378
 soup assigned to rawdata
 filtered for torType Class
 reassigned to soup to tordata
Links Filtered
Printing Recent Torrents from Filter WebData function
['/the-big-bang-theory-s07e08-hdtv-x264-lol-ettv-t8180359.html', '/the-walking-dead-s04e05-hdtv-x264-2hd-ettv-t8158163.html', '/the-vampire-diaries-s05e07-proper-hdtv-x264-2hd-ettv-t8180537.html', '/the-big-bang-theory-7x7-hdtv-lol-t8141134.html', '/how-i-met-your-mother-s09e09-hdtv-x264-2hd-eztv-t8164029.html', '/sons-of-anarchy-s06e10-hdtv-x264-asap-ettv-t8170162.html', '/american-horror-story-s03e06-hdtv-x264-killers-ettv-t8175485.html', '/sleepy-hollow-s01e07-hdtv-x264-lol-eztv-t8164318.html', '/elementary-2x8-hdtv-lol-t8180367.html', '/the-originals-s01e07-hdtv-x264-lol-ettv-t8169688.html', '/the-blacklist-s01e07-hdtv-x264-lol-eztv-t8124923.html', '/modern-family-s05e07-hdtv-x264-2hd-eztv-t8175344.html', '/arrow-s02e06-proper-hdtv-x264-2hd-eztv-t8179975.html', '/white-collar-s05e05-hdtv-x264-2hd-eztv-t8180828.html', '/homeland-s03e07-720p-hdtv-x264-killers-eztv-t8158378.html', '/greys-anatomy-s10e09-hdtv-x264-lol-ettv-t8180608.html', '/how-i-met-your-mother-s09e08-hdtv-x264-2hd-eztv-t8124354.html', '/arrow-s02e05-hdtv-x264-lol-ettv-t8135416.html', '/boardwalk-empire-s04e10-hdtv-x264-2hd-eztv-t8158693.html', '/the-simpsons-s25e04-hdtv-x264-lol-eztv-t8157997.html', '/modern-family-s05e06-hdtv-x264-asap-eztv-t8061643.html', '/new-girl-s03e07-hdtv-x264-lol-eztv-t8130237.html', '/the-tomorrow-people-us-s01e06-hdtv-x264-lol-eztv-t8174964.html', '/the-walking-dead-s04e04-hdtv-x264-2hd-ettv-t8118639.html', '/supernatural-s09e06-hdtv-x264-lol-ettv-t8169899.html']
Printing newdata which should be Recent Torrents from Filter WebData function
['/the-big-bang-theory-s07e08-hdtv-x264-lol-ettv-t8180359.html', '/the-walking-dead-s04e05-hdtv-x264-2hd-ettv-t8158163.html', '/the-vampire-diaries-s05e07-proper-hdtv-x264-2hd-ettv-t8180537.html', '/the-big-bang-theory-7x7-hdtv-lol-t8141134.html', '/how-i-met-your-mother-s09e09-hdtv-x264-2hd-eztv-t8164029.html', '/sons-of-anarchy-s06e10-hdtv-x264-asap-ettv-t8170162.html', '/american-horror-story-s03e06-hdtv-x264-killers-ettv-t8175485.html', '/sleepy-hollow-s01e07-hdtv-x264-lol-eztv-t8164318.html', '/elementary-2x8-hdtv-lol-t8180367.html', '/the-originals-s01e07-hdtv-x264-lol-ettv-t8169688.html', '/the-blacklist-s01e07-hdtv-x264-lol-eztv-t8124923.html', '/modern-family-s05e07-hdtv-x264-2hd-eztv-t8175344.html', '/arrow-s02e06-proper-hdtv-x264-2hd-eztv-t8179975.html', '/white-collar-s05e05-hdtv-x264-2hd-eztv-t8180828.html', '/homeland-s03e07-720p-hdtv-x264-killers-eztv-t8158378.html', '/greys-anatomy-s10e09-hdtv-x264-lol-ettv-t8180608.html', '/how-i-met-your-mother-s09e08-hdtv-x264-2hd-eztv-t8124354.html', '/arrow-s02e05-hdtv-x264-lol-ettv-t8135416.html', '/boardwalk-empire-s04e10-hdtv-x264-2hd-eztv-t8158693.html', '/the-simpsons-s25e04-hdtv-x264-lol-eztv-t8157997.html', '/modern-family-s05e06-hdtv-x264-asap-eztv-t8061643.html', '/new-girl-s03e07-hdtv-x264-lol-eztv-t8130237.html', '/the-tomorrow-people-us-s01e06-hdtv-x264-lol-eztv-t8174964.html', '/the-walking-dead-s04e04-hdtv-x264-2hd-ettv-t8118639.html', '/supernatural-s09e06-hdtv-x264-lol-ettv-t8169899.html']
Mining Ended
Relative Search
Diagnostic line ['*arrow*', '*grimm*', '*elementary*', '*American*Horror*', '*once*Upon*aTime*', '*Agents*of*shield*']
Diagnostic line None
Searching for My Torrents
Reset Vars
Diagnostic line *arrow*
Traceback (most recent call last):
  File "C:\Python33\scratchpad.py", line 121, in <module>
    SearchTorrents(MyPrograms,RecentTorrentLinks)
  File "C:\Python33\scratchpad.py", line 103, in SearchTorrents
    matchobj = fnmatch.filter(TorrentList,item)
  File "C:\Python33\lib\fnmatch.py", line 59, in filter
    for name in names:
TypeError: 'NoneType' object is not iterable

程序代码

WebUrl = 'http://kickasstorrents.come.in/tv/'
MyPrograms = ['*arrow*','*grimm*','*elementary*','*American*Horror*','*once*Upon*aTime*','*Agents*of*shield*']
loop = 0
RecentTorrentLinks = []



def RetrieveWebData(MyUrl):
    try:
        #create Url Opener
        opener = urllib.request.build_opener()
            #Diagnostic Line
        print( "Opener Created")
        #Simulation as a browser
        opener.addheaders =[('User-agent','Mozilla/5.0')]
            #Diagnostic Line
        print( "Opener Headers Added")
        url = (MyUrl)
            #Diagnostic Line
        print( "Url Assigned")
        #Open URL and read Data
        page = opener.open(url).read()
            #Diagnostic Line
        print( "Page Open and Read")
            #Diagnostic Line
        print(len(page))
        newdata = FilterWebData(page)
            # Diagnotic Line
        print ("Printing newdata which should be Recent Torrents from Filter WebData function")
        print (newdata)
        return newdata

    except urllib.error.URLError as e:
        print(e)
        if e.code == 503:
            print (loop ++ 1)
            RetrieveWebData(WebUrl)
        else:
            print('Error Occured :-' + e + ' Code :- '+ e.code)
            sys.exit()




def FilterWebData(RawData):
    RecentTors = []

    try:

        soup = BeautifulSoup(RawData)
            #Diagnostic Line
        print (" soup assigned to rawdata")

        TorData = soup.find_all("a", {"class" : "torType"})
           #Diagnostic Line
        print (" filtered for torType Class")

        soup = BeautifulSoup(str(TorData))
           #Diagnostic Line
        print (" reassigned to soup to tordata")
        for link in soup.find_all('a'):
            RecentTors.append(link.get('href'))

           #Diagnostic Line
        print ("Links Filtered")
            # Diagnotic Line
        print ("Printing Recent Torrents from Filter WebData function")
        print (RecentTors)
        return RecentTors

    #Simpler Version of my code by StackOverlfow User
        #TorData = soup.find_all("a", {"class" : "torType", 'href': True})
        #return [link['href'] for link in TorData]

    except OSError as e:
        print("An error occurred during filtering",e)



def SearchTorrents(SearchCrit,TorrentList):
    try:
                    #Diagnostic Line
        print ('Diagnostic line ' + str(SearchCrit))
        print ('Diagnostic line ' + str(TorrentList))
                    #Diagnostic Line
        print ("Searching for My Torrents")
        item = " "
        matchobj = " "
                    #Diagnostic Line
        print ("Reset Vars")

        for item in SearchCrit:
                        #Diagnostic Line
            print ('Diagnostic line ' + item)
            #print ('Diagnostic line ' + str(TorrentList))
            matchobj = fnmatch.filter(TorrentList,item)
            print (matchobj)
    except OSError as e:
        print("An error occurred during searching",e)

    #Diagnostic Line
print ("Beginning Mining")
RecentTorrentLinks = RetrieveWebData(WebUrl)  

            #Diagnostic Line
print ("Mining Ended")

            #Diagnostic Line
print ("Relative Search")
            #Diagnostic Line
#print ("Diagnotic Line TorrentLinks ")
#print (RecentTorrentLinks)

SearchTorrents(MyPrograms,RecentTorrentLinks)

           #Diagnostic Line
print ("Relative Ended")  

Tags: theinforhtmllineopenerprintlol
2条回答

看起来变量TorrentList有时不是列表,而是非类型的。所以,当你试图过滤它时,它会抛出错误。在筛选代码之前,您应该在代码中添加一个签入,以确保它实际上是一个列表。

您可以在输出中看到,在出现错误之前,将打印以下行:

Diagnostic line ['*arrow*', '*grimm*', '*elementary*', '*American*Horror*', '*once*Upon*aTime*', '*Agents*of*shield*']
Diagnostic line None

这些是以下行的输出:

print ('Diagnostic line ' + str(SearchCrit))
print ('Diagnostic line ' + str(TorrentList))

如您所见,TorrentList打印出“无”,而不是列表。所以,正如我上面所说,当你试图在下面的行中过滤这个:

matchobj = fnmatch.filter(TorrentList,item)

它抛出错误。

你的TorrentList实际上是None,这意味着你不能遍历它。

更改此行

matchobj = fnmatch.filter(TorrentList,item)

if TorrentList is not None:
    matchobj = fnmatch.filter(TorrentList,item)
else:
    # Throw whatever error/exception you need

相关问题 更多 >