执行transact-sql语句或批处理时发生异常_Python 工匠: 异常处理的三个好习惯

本文探讨了Python异常处理的三个好习惯:只做精准的异常捕获,避免异常破坏抽象一致性,以及如何不让异常处理喧宾夺主。通过实例分析,提出使用上下文管理器来优化异常处理,提升代码可读性和维护性。
摘要由CSDN通过智能技术生成

04e7c1e88799f627809f11f6fdb7a209.png

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

前言

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

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

1.异常的基本语法与用法

2.为什么要使用异常代替错误返回

3.为什么在写 Python 时鼓励使用异常

只做精准的异常捕获

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

# -*- 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'<title>(.*)</title>', 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 语句块,将这几个步骤都包裹了起来。安全第一 。

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

如果你旁边刚好有一台安

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值