【问题标题】:Try and Except with Python request尝试并排除 Python 请求
【发布时间】:2018-05-17 22:03:19
【问题描述】:

如果运行下面的脚本,它会从我想要的所有人开始(例如:Nick Ahmed、Alex Avila 等)。但是在 9 点左右之后给我一个KeyError: 'row'

脚本

import csv
import requests
import datetime
from pprint import pprint

# GET TEAM ID AND STORE AS team_id
req = requests.get('http://lookup-service-prod.mlb.com/json/named.team_all_season.bam?sport_code=%27mlb%27&all_star_sw=%27N%27&sort_order=name_asc&season=%272018%27') 
data = req.json()['team_all_season']['queryResults']['row']

for teams in data:
    team_id = teams['team_id']
    team = teams['name_abbrev']

    # GET PLAYER ID using team_id string and store PLAYER ID as playerId
    req1 = requests.get('http://lookup-service-prod.mlb.com/json/named.roster_40.bam?team_id=' + str(team_id) + '') 
    roster = req1.json()['roster_40']['queryResults']['row']

    for info in roster:
        player = info['name_display_first_last']
        playerId = info['player_id']

        # Use playerId string to run through PECOTA BATTING PROJECTIONS
        req2 = requests.get("http://lookup-service-prod.mlb.com/json/named.proj_pecota_batting.bam?season='2018'&player_id='" + str(playerId) + "'") 
        info1 = req2.json()['proj_pecota_batting']['queryResults']['row']
        # KEYS 
        hr = info1['hr']
        sac = info1['sac']
        rbi = info1['rbi']
        tb = info1['tb']
        slg = info1['slg']
        bavg = info1['avg']
        bb = info1['bb']
        ops = info1['ops']
        hbp = info1['hbp']
        games = info1['g']
        d = info1['d']
        e = info1['e']
        so = info1['so']
        sf = info1['sf']
        tpa = info1['tpa']
        h = info1['h']
        cs = info1['cs']
        obp = info1['obp']
        t = info1['t']
        s = info1['s']
        r = info1['r']
        sb = info1['sb']
        sbpct = info1['sbpct']
        ab = info1['ab']
        ibb = info1['ibb']

        print(player,team,hr,sac,rbi,tb,slg,bavg,bb,ops,hbp,games,d,e,so,sf,tpa,h,cs,obp,t,s,r,sb,sbpct,ab,ibb)

如果我添加 try: except(KeyError): 它会起作用,但会跳过很多玩家,就像我之前使用的示例一样。这对我来说没有意义,因为如果他们在try 之前工作,为什么他们现在不工作?仅复制以下脚本的已编辑部分以显示try: except:

脚本编辑:

# Use playerId string to run through PECOTA BATTING PROJECTIONS
req2 = requests.get("http://lookup-service-prod.mlb.com/json/named.proj_pecota_batting.bam?season='2018'&player_id='" + str(playerId) + "'") 
try:
    info1 = req2.json()['proj_pecota_batting']['queryResults']['row']
except(KeyError):
# KEYS 
    hr = info1['hr']
    sac = info1['sac']
    rbi = info1['rbi']
    tb = info1['tb']
    slg = info1['slg']
    bavg = info1['avg']
    bb = info1['bb']
    ops = info1['ops']
    hbp = info1['hbp']
    games = info1['g']
    d = info1['d']
    e = info1['e']
    so = info1['so']
    sf = info1['sf']
    tpa = info1['tpa']
    h = info1['h']
    cs = info1['cs']
    obp = info1['obp']
    t = info1['t']
    s = info1['s']
    r = info1['r']
    sb = info1['sb']
    sbpct = info1['sbpct']
    ab = info1['ab']
    ibb = info1['ibb']

    print(player,team,hr,sac,rbi,tb,slg,bavg,bb,ops,hbp,games,d,e,so,sf,tpa,h,cs,obp,t,s,r,sb,sbpct,ab,ibb)

【问题讨论】:

  • 你把所有使用info1的代码放在except KeyError:里面。这与你想要的完全相反。如果它工作,你想使用info1,而不是如果它失败
  • 同时,如果你想调试一些东西,你需要看看失败的输出是什么。当您收到KeyError 时,不要只是吞下它然后尝试猜测出了什么问题。打印出KeyError,并打印出导致它的值(在这种情况下,req2.json()['prec_pecota_batting']['query_results'],或者可能更大的东西,比如整个req2.text 或其他东西)。然后你就会知道你在处理什么。
  • 第一次用 try 和 except 编写脚本,我明白了我现在做了什么。我接受了你的建议,做了 print error 和 req2.text 并看了一会儿。 try: 某事,(如果有错误)except 它:然后“继续”或Pass 到下一个请求现在完全有意义。谢谢你让我弄清楚!

标签: python try-except


【解决方案1】:

try except 应该是这样的:

import csv
import requests
import datetime
from pprint import pprint

##outfile = open('MLB_HITTER_PICOTA_' + datetime.datetime.now().strftime('%Y') + '.csv','w',newline='')
##writer = csv.writer(outfile)
##writer.writerow(["mlb_hitter","team","hr","sac","rbi","tb","slg","bavg","bb","ops","hbp","games","d","e","so","sf","tpa","h","cs","obp","t","s","r","sb","sbpct","ab","ibb"])

# GET TEAM ID AND STORE AS team_id
req = requests.get('http://lookup-service-prod.mlb.com/json/named.team_all_season.bam?sport_code=%27mlb%27&all_star_sw=%27N%27&sort_order=name_asc&season=%272018%27') 
data = req.json()['team_all_season']['queryResults']['row']

for teams in data:
    team_id = teams['team_id']
    team = teams['name_abbrev']

    # GET PLAYER ID using team_id string and store PLAYER ID as playerId
    req1 = requests.get('http://lookup-service-prod.mlb.com/json/named.roster_40.bam?team_id=' + str(team_id) + '') 
    roster = req1.json()['roster_40']['queryResults']['row']

    for info in roster:
        player = info['name_display_first_last']
        playerId = info['player_id']

        # Use playerId string to run through PECOTA BATTING PROJECTIONS
        req2 = requests.get("http://lookup-service-prod.mlb.com/json/named.proj_pecota_batting.bam?season='2018'&player_id='" + str(playerId) + "'")
##        pprint(req2.text)
        try:
            info1 = req2.json()['proj_pecota_batting']['queryResults']['row']
            hr = info1['hr']
            sac = info1['sac']
            rbi = info1['rbi']
            tb = info1['tb']
            slg = info1['slg']
            bavg = info1['avg']
            bb = info1['bb']
            ops = info1['ops']
            hbp = info1['hbp']
            games = info1['g']
            d = info1['d']
            e = info1['e']
            so = info1['so']
            sf = info1['sf']
            tpa = info1['tpa']
            h = info1['h']
            cs = info1['cs']
            obp = info1['obp']
            t = info1['t']
            s = info1['s']
            r = info1['r']
            sb = info1['sb']
            sbpct = info1['sbpct']
            ab = info1['ab']
            ibb = info1['ibb']

            print(player,team,hr,sac,rbi,tb,slg,bavg,bb,ops,hbp,games,d,e,so,sf,tpa,h,cs,obp,t,s,r,sb,sbpct,ab,ibb)

        except(KeyError):
            pass

try: something # 如果某些部分不起作用

except(): # 那东西不起作用-在我的情况下except(KeyError):

pass#到下一个东西

【讨论】:

    猜你喜欢
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多