Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅执行两个链接范围中的第一个_Python - Fatal编程技术网

Python 仅执行两个链接范围中的第一个

Python 仅执行两个链接范围中的第一个,python,Python,考虑下面的简单循环,它产生我想要的输出: import itertools as it for e in range (0, 16): for i in it.chain(range(30, 53), range(1, 19)): print(e, i) 我构建的此代码的放大版本没有产生预期的结果: import json import requests import time import datetime import dateutil import trac

考虑下面的简单循环,它产生我想要的输出:

import itertools as it
for e in range (0, 16):
    for i in it.chain(range(30, 53), range(1, 19)):
        print(e, i)   
我构建的此代码的放大版本没有产生预期的结果:

import json
import requests
import time
import datetime
import dateutil
import traceback
import os.path
import itertools as it

year_map = [2,89,213,359,542,803,1208,937,2025,2539,3115,4345,5476,6531,7794,9155,5826]
tournament_map = [26,114,243,421,579,903,1291,1645,2175,2689,3419,4940,5861,6978,8273]
years = [1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015]

for i in range (0, 16):

    try:

        url = ('http://www.whoscored.com/tournamentsfeed/',str(year_map[i]),'/Fixtures/')
        url = ''.join(url)
        headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest',
        'Host': 'www.whoscored.com',
        'Referer': 'http://www.whoscored.com/'}

        for f in it.chain(range(30, 53), range(1, 19)):

            game_week = (str(years[i]), 'W', str(f))
            game_week = ''.join(game_week)

            params = {'d': game_week,
            'isAggregate': 'false'}

            response = requests.get(url, params=params, headers=headers)
            response2 = (url, str(params))
            response2 = ','.join(response2)

            json_data = response.content.replace("'", '"').replace(',,', ',null,')
            fixtures = json.loads(json_data)

            if len(fixtures) > 1:

                myfile = ",\n".join([", ".join(str(x) for x in fixture) for fixture in fixtures])  # `fixtures` is a nested list
                print myfile
                myfile2 = myfile + '\n'
                time.sleep(20)

                #create text file here


    except Exception as exc:

        print response2
        print exc
        print response.status_code
        print response.text
        pass
        time.sleep(20)

print "-" *120         
然而,当我运行这个版本的代码时,它只会迭代两个链接范围中的第一个。在这种情况下,它会为一个赛季的8月到12月之间浏览的部分足球数据生成数据。然后,代码停止执行,不会出错

有人能在代码中看到导致这种情况发生的任何东西吗?我被难住了


感谢

循环工作正常,并且包含了来自
range()
调用的值;您确定您正确诊断了这些问题吗?还请注意,由于Python 2
range()
生成列表对象,因此您最好使用
range(30,53)+range(1,19)
一次,然后迭代结果。或者在这里切换到使用
xrange()
。我不太清楚为什么在给定的年份中,你将第1-18周放在第30-52周之前。@MartijnPieters嗨,martijn。数据来自服务器的方式是,两个不同年份的第30-52周和第1-18周被分配相同的年份值,因为它们是同一运动季节的一部分。我打印到日志的输出只运行了30-52周,然后代码就完成了执行。输出文本文件的内容也反映了这一点。我将再看一看代码和您关于范围语法的建议,以便继续使用。很可能,它没有为某些循环迭代输入
if len(fixtures)>1:
条件,因此没有打印任何内容。在循环开始处放置一个
print
,查看是否执行了所有循环迭代。我现在正在执行代码,而没有考虑if语句。将让您知道结果。循环工作正常,包括
range()
调用的值;您确定您正确诊断了这些问题吗?还请注意,由于Python 2
range()
生成列表对象,因此您最好使用
range(30,53)+range(1,19)
一次,然后迭代结果。或者在这里切换到使用
xrange()
。我不太清楚为什么在给定的年份中,你将第1-18周放在第30-52周之前。@MartijnPieters嗨,martijn。数据来自服务器的方式是,两个不同年份的第30-52周和第1-18周被分配相同的年份值,因为它们是同一运动季节的一部分。我打印到日志的输出只运行了30-52周,然后代码就完成了执行。输出文本文件的内容也反映了这一点。我将再看一看代码和您关于范围语法的建议,以便继续使用。很可能,它没有为某些循环迭代输入
if len(fixtures)>1:
条件,因此没有打印任何内容。在循环开始处放置一个
print
,查看是否执行了所有循环迭代。我现在正在执行代码,而没有考虑if语句。我会让你知道结果的。