【问题标题】:Continuously looping, unable to work out what's going wrong不断循环,无法找出问题所在
【发布时间】:2026-02-23 00:45:02
【问题描述】:

我下面的代码没有按照我想要的方式工作,我尝试对其进行一些评论以使其更容易。

基本上我希望它最多尝试3次访问网站,如果成功则退出循环并继续,如果失败3次则退出函数。

import random
import urllib2
import httplib
import urllib
import mechanize

def test():

    ## For three attempts...
    for i in range(0, 3):
        ## While in the three attempts...
        while True:
            ## Try...
            try:
                print "trying"
                ## Proxy list
                proxy_list = {"No Proxy": "None"}

                ## Randomly chosen proxy
                proxy_number = random.choice(proxy_list.keys())

                ## URL to post to in order to get data.
                post_url = ""

                browser = mechanize.Browser()
                browser.set_handle_robots(False)
                browser.addheaders = [('User-agent', 'Firefox')]
                parameters = {""}
                data = urllib.urlencode(parameters)

                ## If proxy_number = No Proxy then...
                if proxy_number == "No Proxy":
                    ## Do not setup proxy details
                    proxy_details = None
                ## If proxy_number is a real proxy then...
                else:
                    ## Get the proxy details
                    proxy_details = proxy_list[proxy_number]
                    ## Setup the proxy
                    browser.set_proxies({"http": proxy_number})

                ## Contact the webpage
                trans_array = browser.open(post_url).read().decode('UTF-8')
                print trans_array
                ## If successfully exit loop
                break
            ## On exceptions
            except:
                ## If unsuccessful continue and retry
                continue
            ## End the current loop
        break
            ## If it was unsuccessful after three attempts return false
        return

    print trans_array

test()

谁能解释我做错了什么?

编辑:对于 falsetru

def test():
    for i in range(3):
        try:
            ...
            break
    except:
        counter = counter  + 1
        print counter 
        continue

    if counter  == 3:
        return False

提前致谢 - 海福克斯

【问题讨论】:

  • 在我看来,因为你继续异常,如果每次都发生异常,while循环将无限执行
  • 你的 while 循环将永远为真,for 循环永远不会超过范围 1

标签: python python-2.7 random proxy mechanize


【解决方案1】:

如果发生错误,则执行continuewhile 如果错误不断出现,则循环永远不会结束。

def test():
    for i in range(0, 3):
        while True:
            try:
                ...
                break
            except:
                continue # <---
        break

恕我直言,while 循环是不必要的:

def test():
    for i in range(3):
        try:
            ...
            break
        except:
            continue
    else:
        return # Reach here if for loop was not ended by break
    print trans_array

【讨论】:

  • 嘿@falsetru 那么我怎样才能让你的固定示例在第三次失败后退出函数?
  • @Hyflex,使用for i in range(3):,运行不超过3次。
  • @falsetrue,是的,我理解那部分,但我希望它能够在第三次失败后退出函数,但如果它没有失败,它将跳过下面。查看我的编辑
  • @Hyflex,下面是什么? print trans_array?
  • @Hyflex,您可以使用for .. else .. 声明。查看更新的代码。