Python 如何过滤掉for循环中的元素?
我有一个链接到json文件的链接列表。其中一些是空白的,或者带有一些错误,当我尝试将它们作为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
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
。除了简单性之外,异常处理还有很多选择。