2016-08-14 76 views
1

对不起,如果这是一个愚蠢的问题,但我有我的代码几个问题。Python中的奇怪错误(IndexError)

我有一个Python脚本,刮擦Reddit和设置顶部图片作为我的桌面背景。

我希望它只下载如果图片足够大,但我得到一个奇怪的错误。

>>> m = '1080x608' 
>>> w = m.rsplit('x', 1)[0] 
>>> print(w) 
1080 
>>> h = m.rsplit('x', 1)[1] 
>>> print(h) 
608 

这工作正常,但以下不,尽管几乎相同。

>>> m = '1280×721' 
>>> w = m.rsplit('x', 1)[0] 
>>> h = m.rsplit('x', 1)[1] 
Traceback (most recent call last): 
    File "<pyshell#35>", line 1, in <module> 
    h = m.rsplit('x', 1)[1] 
IndexError: list index out of range 
+0

'x'字符在每种情况下都是不同的。仔细看! – Selcuk

+0

啊!我看不到它!我会继续寻找 –

+0

哦,我明白了!谢啦! –

回答

0

×!= x。 Split会返回一个元素列表,并且您试图从中检索第二个元素。

'1080x608'.rsplit('x', 1) # ['1080', '608'] 
'1280×721'.rsplit('x', 1) # ['1280\xc3\x97721'] 

在第二种情况下存在列表中没有秒元素 - 它仅包含一个元素。

MCVE是:

l = ['something'] 
l[1] 

,出现异常:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: list index out of range 

要确保你分割字符串两个部分,你可以使用partition

分割字符串在九月的第一次出现,和隔板后的分离器之前返回包含一部分的3元组 ,隔板本身,和 的部分。如果未找到分隔符,则返回包含该字符串本身的三元组,然后返回两个空字符串。

w, sep, h = m.partition('x') 
# h and sep will be empty if there is no separator in m 
+0

但是为什么它在第一个例子中工作,但不是在第二个例子中?对不起,这个愚蠢的问题 –

0

在你的第二个例子是×不一样x,它是不是一个乘号。如果你从某个地方得到这些叮咬然后解析它们,你应该首先做

m = m.replace('×', 'x') 
+0

是的,我在你评论之前加了一行,谢谢你的队友 –