V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Curtain
V2EX  ›  Python

for 循环中出现异常时如何跳过继续处理?

  •  
  •   Curtain · 2017-03-14 14:34:58 +08:00 · 16754 次点击
    这是一个创建于 2822 天前的主题,其中的信息可能已经有所发展或是发生改变。
    for 循环中出现不可预测异常时,跳过本次循环并 print 出错误内容,继续执行下一次循环应该如何写?
    现在使用的是 try...except...这样的,使用 continue 方法.
    但是在实测中,如果连接失败,程序之间停止.
    在代码中可以看出,是使用的 bs 抓取 url.程序循环到其中某一条连接时,内容里没有包含指定 a 标签的内容的话,也会报错并终止程序.
    应该如何实现继续循环?
    for u in product_page_url:
    a = requests.get(u.strip())
    soup = BeautifulSoup(a.text, 'html.parser')
    try:
    clean_downurl = soup.find(class_ = 'downurl').a['href']
    b.append(clean_downurl)
    print u
    except:
    continue
    9 条回复    2017-03-17 10:16:31 +08:00
    jpyl0423
        1
    jpyl0423  
       2017-03-14 14:58:57 +08:00
    可能 requests.get 这一步就异常了.
    Curtain
        2
    Curtain  
    OP
       2017-03-14 15:21:15 +08:00
    @jpyl0423 在执行 clean_downurl = soup.find(class_ = 'downurl').a['href'] 的时候。提示 soup 的错误,没有找到 a 标签。然后就终止程序了。这应该怎么写呀?
    omg21
        3
    omg21  
       2017-03-14 16:07:13 +08:00
    第一个,你在 requests.get 之前并没有做 try ,所以在连接出错时会报错停止。
    第二个,我不知道你这个 BS 的 find 的语法对不对,但是我认为如果 try 不起作用,你可以换个方法,比如在后边做个判断,用 if 代替 try 。
    awanabe
        4
    awanabe  
       2017-03-14 16:11:16 +08:00
    except 没有捉到异常? 加个 Exception 试试?
    Curtain
        5
    Curtain  
    OP
       2017-03-14 16:56:22 +08:00
    @omg21 第一个已经修改 try 的位置,已经解决了,第二个 BS 的语法经过测试是可以正常获取到值的。如果解决不了的话在考虑使用 if 吧。
    grimpil
        6
    grimpil  
       2017-03-14 22:17:03 +08:00 via Android
    错误原因是啥,报错信息你能不能看懂
    guyskk
        7
    guyskk  
       2017-03-15 10:12:46 +08:00   ❤️ 1
    @awanabe #4 别瞎猜啊, try except 捕获所有异常, try except Exception 捕获 Exception 类型的异常。另外要避免 try except 不加异常类型的用法,这很容易吃掉不应该忽略的异常。
    Curtain
        8
    Curtain  
    OP
       2017-03-17 09:00:51 +08:00
    @grimpil 错误原因看得懂的,列表中的某些 url 不存在我找的指定连接,然后就 bs 就提示错误了, requests 的错误是因为网络有时不稳定,连接不到 url 然后报错的。
    grimpil
        9
    grimpil  
       2017-03-17 10:16:31 +08:00 via Android
    clean_downurl = soup.find(class_ = 'downurl')
    if clean_downurl is not None:
    clean_downurl = clean_downurl.a['href']
    我是习惯这样,如果变量获取了某个值,进行下一步操作前,先判断一下是否为空,是否和预期一致
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3583 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 04:39 · PVG 12:39 · LAX 20:39 · JFK 23:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.