快速修复:
try:
runner_1_name = data['markets'][0]['runners'][0]['name']
except IndexError:
runner_1_name = '' # don't just pass here
try:
runner_2_name = data['markets'][0]['runners'][1]['name']
except IndexError:
runner_2_name = ''
它给你
variables is referenced before assignment
因为在Expect块中,您只是路过,所以如果尝试失败
runner_1_name
或
runner_2_name
从未定义。当你试图使用这些变量时,你会得到一个错误,因为它们从未被定义过。所以在except块中,要么将值设置为空字符串,要么设置为类似于
'Runner Does not Exists'
.
现在,如果你想完全避免尝试/排除和
IndexError
你可以使用
if
要检查的语句长度
markets
和
runners
. 像这样:
runner_1_name = ''
runner_2_name = ''
# Make sure markets exists in data and its length is greater than 0 and runners exists in first market
if 'markets' in data and len(data['markets']) > 0 and 'runners' in data['market'][0]:
runners = data['markets'][0]['runners']
# get runner 1
if len(runners) > 0 and `name` in runners[0]:
runner_1_name = runners[0]['name']
else:
runner_1_name = 'Runner 1 does not exists'
# get runner 2
if len(runners) > 1 and `name` in runners[1]:
runner_2_name = runners[1]['name']
else:
runner_2_name = 'Runner 2 does not exists'
正如你所看到的,这个过程太长了,这不是推荐的方法。
您应该假设数据是正确的,并尝试获取名称,然后使用try/except捕获上面在我的第一个代码片段中建议的任何错误。