2013-11-15 25 views
0

У меня есть несколько сообщений за последние несколько дней, поэтому спасибо за помощь до сих пор, все это ценно для помощи новичку.TypeError: объект «NoneType» не является итерируемым, Python

Heads Up, я знаю, что код, приведенный ниже, выглядит очень простым, и, возможно, есть потерянный более простой и элегантный способ добиться того, что я пытаюсь, но на данный момент это основы, которые я могу узнать и на самом деле понять до степени ха-ха.

Просто интересно, если кто-то может на самом деле сказать мне, что ошибка вызвана, на выходе программы, это, кажется, хорошо работать иногда и не с этой ошибкой, может быть, 2 из 3.

это еще работа в процессе реализации основной целью является создание программы, в которой я могу автоматизировать что-то, что я делаю вручную в качестве учебной среды.

Спасибо за понимание.

Программа выходного

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") 
+0

Ok благодаря ответам, я implementated проверку на наличие ошибок, и я заменил возвращение в функции retreieveweb с глобальной переменной, список был огибают от переменной до переменной до много, как только я это понял, может быть, некорректный ярлык, кажется, все работает в первый раз на данный момент. спасибо за понимание и помощь :) – DeadZero

ответ

4

Ваш TorrentList на самом деле None, что означает, что вы не можете перебирать его.

Изменение этой линии

matchobj = fnmatch.filter(TorrentList,item) 

к

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

Спасибо Codegeek, я добавлю, что добавление, но то, что я не понимаю, список не должен быть пустым, как дальше по коду, он должен сгенерированный список, но он, кажется, не обращается к никому при передаче в поиск функция. оценил и поблагодарил – DeadZero

2

Похоже переменной TorrentList иногда не список, но вместо этого NoneType. Поэтому, когда вы пытаетесь отфильтровать его, он выдает ошибку. Вы должны добавить чек в свой код, чтобы убедиться, что это фактически список, прежде чем фильтровать его.

Вы можете видеть в своем выходе, перед ошибкой, эти строки печатаются:

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) 

оно выдает ошибку.

+0

Спасибо, простите, я это заметил, но я думал, что это был список на всем пути, кажется, что иногда он не меняется ни перед кем, передавая его в функцию поиска, можете ли вы посоветовать, как проверить, это список, если это нормально с самим собой. Еще раз спасибо – DeadZero

Смежные вопросы