电子书 当前页面的脚本发生错误 异常处理的三个好习惯 | Python 工匠

11/28 05:09:02 来源网站:辅助卡盟网

电子书 当前页面的脚本发生错误 异常处理的三个好习惯 | Python 工匠

文 | piglei 编辑 | EarlGrey

推荐 | 编程派(微信ID:codingpy)

前言

如果你用 Python 编程,那么你就无法避开异常,因为异常在这门语言里无处不在。打个比方,当你在脚本执行时按 ctrl+c 退出,解释器就会产生一个 KeyboardInterrupt 异常。而 KeyError、 ValueError、 TypeError 等更是日常编程里随处可见的老朋友。

异常处理工作由“捕获”和“抛出”两部分组成。“捕获”指的是使用 try...except 包裹特定语句,妥当的完成错误流程处理。而恰当的使用 raise 主动“抛出”异常,更是优雅代码里必不可少的组成部分。

在这篇文章里,我会分享与异常处理相关的 3 个好习惯。继续阅读前,我希望你已经了解了下面这些知识点:

三个好习惯1. 只做最精确的异常捕获

假如你不够了解异常机制,就难免会对它有一种天然恐惧感。你可能会觉得:异常是一种不好的东西,好的程序就应该捕获所有的异常,让一切都平平稳稳的运行。而抱着这种想法写出的代码,里面通常会出现大段含糊的异常捕获逻辑。

让我们用一段可执行脚本作为样例:

  1. # -*- coding: utf-8 -*-

    import requests

    import re



    def save_website_title(url, filename):

    """获取某个地址的网页标题,然后将其写入到文件中


    :returns: 如果成功保存,返回 True,否则打印错误,返回 False

    """

    try:

    resp = requests.get(url)

    obj = re.search(r'(.*)', resp.text)

    if not obj:

    print('save failed: title tag not found in page content')

    return False


    title = obj.grop(1)

    with open(filename, 'w') as fp:

    fp.write(title)

    return True

    except Exception:

    print(f'save failed: unable to save title of {url} to {filename}')

    return False



    def main():

    save_website_title('https://www.qq.com', 'qq_title.txt')



    if __name__ == '__main__':

    main()

    脚本里的 save_website_title 函数做了好几件事情。它首先通过网络获取网页内容,然后利用正则匹配出标题,最后将标题写在本地文件里。而这里有两个步骤很容易出错:网络请求 与 本地文件操作。所以在代码里,我们用一个大大的 try...except 语句块,将这几个步骤都包裹了起来。安全第一 ⛑。

    那么,这段看上去简洁易懂的代码,里面藏着什么问题呢?

    如果你旁边刚好有一台安装了 Python 的电脑,那么你可以试着跑一遍上面的脚本。你会发现,上面的代码是不能成功执行的。而且你还会发现,无论你如何修改网址和目标文件的值,程序仍然会报错 “save failed: unable to...”。为什么呢?

    暂无相关资讯
电子书 当前页面的脚本发生错误 异常处理的三个好习惯 | Python 工匠