2013-07-02 132 views
1
while start_chapter<=end_chapter: 
    os.makedirs("Chapter "+str(start_chapter)) 
    os.chdir("Chapter "+str(start_chapter)) 
    chap_url=link+"/c"+str(start_chapter)+"/" 
    page=1 
    try: 
     max_page=get_max_page(chap_url) 
    except: 
     continue 
    while(page<=max_page): 
     page_url=chap_url+str(page)+".html" 
     try:   
      pic_url=get_pic(page_url) 
     except: 
      break 
     picture_shit=urllib2.urlopen(pic_url).read() 
     with open(str(page)+"."+(pic_url.split(".")[len(pic_url.split("."))-1]), 'w') as f: f.write(picture_shit) 
     print str(start_chapter)+"::"+str(page) 
      page+=1 
    os.chdir("../") 
    start_chapter+=1 

内部while循环不会停止,我测试页面,看到它正在超过max_page是23,但它只是不停止。可以任何人帮助吗?谢谢提前...虽然循环不会停止

+0

page + = 1在while循环的结尾? – lakesh

+2

那么,考虑到循环体内没有任何循环变量的变化,你会期待什么? –

+0

对不起,我复制了错误的代码。实际上,我有页面+ = 1 ..仍然无法正常工作 –

回答

9

max_page是一个字符串,而不是一个数字。

>>> 1 < '0' 
True 
+0

对..我没有注意到...感谢很多人...我欠你一个:D –

+2

@HasanSaad不要忘记[接受他的回答](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work):) – TerryA

3

这里有相当多的问题:

  • 你永远不增加page所以它永远不会达到max_page值(编辑:现在固定在你的例子)
  • 按照以上您的编辑,增量将只发生如果文件成功打开
  • 有一个意图错误正好在您的with块下面
  • max_page不是一个数字,这将导致问题的伊格纳西奥指出
  • try: continue:块你意味着,如果有错误分配MAX_PAGE,它不会被再次分配造成比较问题

这应该修复你的大部分问题:

while start_chapter<=end_chapter: 
    os.makedirs("Chapter "+str(start_chapter)) 
    os.chdir("Chapter "+str(start_chapter)) 
    chap_url=link+"/c"+str(start_chapter)+"/" 
    page=1 
    try: 
     max_page=int(get_max_page(chap_url)) 
     while(page<=max_page): 
      page_url=chap_url+str(page)+".html" 
      try:   
       pic_url=get_pic(page_url) 
       picture_shit=urllib2.urlopen(pic_url).read() 
       with open(str(page)+"."+(pic_url.split(".")[len(pic_url.split("."))-1]), 'w') as f: 
        f.write(picture_shit) 
       print str(start_chapter)+"::"+str(page) 
      except: 
       break 
      page+=1 
    except: 
     continue 
    os.chdir("../") 
    start_chapter+=1 
+0

我did.I只是复制hte代码这里错了..Sorry –

+0

并感谢您的意见:D –

+0

不用担心,它工作?如果@Haidro建议你应该选择一个答案,以便人们可以找到未来适合你的东西。 StackOverflow不只是回答你的问题,它也回答下一个人的问题:P – 2013-07-02 04:18:36