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

Python 如何过滤掉for循环中的元素?,python,for-loop,error-handling,Python,For Loop,Error Handling,我有一个链接到json文件的链接列表。其中一些是空白的,或者带有一些错误,当我尝试将它们作为 data = urllib2.urlopen(www.whatever.co.uk).read() data = json.loads(data) 我需要的是创建一个“好”链接列表。我想创建一个for循环,如下所示: links = [] for i in urls: try: data = urllib2.urlopen(str(i)).read() dat

我有一个链接到json文件的链接列表。其中一些是空白的,或者带有一些错误,当我尝试将它们作为

data = urllib2.urlopen(www.whatever.co.uk).read()
data = json.loads(data) 
我需要的是创建一个“好”链接列表。我想创建一个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

我确信很多链接都是好的,因为我试过了。如何排除这些错误链接?谢谢

您正在引发内部异常。如果您想忽略它,请将raise替换为pass。像这样:

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

对于较大的应用程序,这是一种有点糟糕的做法,因为您看不到遇到了什么错误。考虑记录错误并继续,或者计数错误,如果有太多错误,在末尾生成一个异常。

如果调用调用,则脚本将引发错误并停止执行。

我更喜欢在这种情况下,它看起来更可读

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\u链接。append(url)
正确的形式是:

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

raise
替换为
pass
您已经在
链接中只添加了好的链接。显示URL示例,并且应该是
链接。append(str(i))
您可能应该
解码
您的数据,我认为有些包含非ascii字符
data.decode('utf-8')
此外,在
中要更加具体,除了
子句。通常您最多只想捕获
异常。例如,当前此代码阻止您使用SIGINT(Ctrl-C)终止程序,因为它捕获了生成的
键盘中断
。对,但由于这是OP要求的一个酒窝示例,我尝试编写一个基本
try except
。除了简单性之外,异常处理还有很多选择。