如何过滤掉for循环中的元素?

时间:2015-07-28 09:38:06

标签: python for-loop error-handling

我有一个链接到json文件的链接列表。其中一些是空白的或带有一些错误,当我尝试加载它们时失败

data = urllib2.urlopen(www.whatever.co.uk).read()
data = json.loads(data) 

我需要的是创建一个" good"链接。我在考虑创建一个for循环:

links = []
for i in urls:
    try:
        data = urllib2.urlopen(str(i)).read()
        data = json.loads(data)
        links.append(url)
    except:
    raise

但我收到此错误

ValueError: No JSON object could be decoded

我确信很多链接都很好,因为我单独尝试过它们。如何排除这些有缺陷的链接?感谢

3 个答案:

答案 0 :(得分:1)

你正在提出内部异常。如果你想忽略它,用pass代替raise。像这样:

bluez

对于较大的应用程序,这是一种不好的做法,因为您不会看到您遇到的错误。如果您有太多错误,请考虑记录错误并继续,或计算错误并在最后生成一个例外。

答案 1 :(得分:1)

如果您调用raise,那么您的脚本将引发错误并停止执行。

在这种情况下我更喜欢try-except-else,它看起来更具可读性

good_links = []
bad_links = []
for i in urls:
    try:
        data = urllib2.urlopen(str(i)).read()
        data = json.loads(data)
    except Exception:
        bad_links.append(url)  # corrupted url or json data.
    else:
        good_links.append(url)

以上示例将错误链接放到单独的列表中,但如果您不需要,则只需使用pass代替bad_links.append(url)

答案 2 :(得分:0)

正确的形式是:

links = []
for i in urls:
    try:
        data = urllib2.urlopen(str(i)).read()
        data = json.loads(data)
        links.append(url)
     except:
     pass