百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

python 异常捕获方法总结

off999 2024-11-19 08:36 28 浏览 0 评论

异常捕获

当发生异常时,我们就需要对异常进行捕获,然后进行相应的处理。python 的异常捕获常用 try…except…结构,把可能发生错误的语句放在 try 模块里,用 except 来处理异常,每一个 try,都必须至少对应一个 except。此外,与 python 异常相关的关键字主要有:

1 捕获所有异常

包括键盘中断和程序退出请求(用 sys.exit() 就无法退出程序了,因为异常被捕获了),因此慎用。

try:
    <语句>
except:
    print('异常说明')

2 捕获指定异常

try:
    <语句>
except <异常名>:
    print('异常说明')

万能异常:

try:
    <语句>
except Exception:
    print('异常说明')

一个例子:

try:
    f = open("file-not-exists", "r")
except IOError as e:
    print("open exception: %s: %s" %(e.errno, e.strerror))

3 捕获多个异常

捕获多个异常有两种方式,第一种是一个 except 同时处理多个异常,不区分优先级:

try:
    <语句>
except (<异常名1>, <异常名2>, ...):
    print('异常说明')

第二种是区分优先级的:

try:
    <语句>

except <异常名1>:

    print('异常说明1')

except <异常名2>:

    print('异常说明2')

except <异常名3>:

    print('异常说明3')

该种异常处理语法的规则是:

执行 try 下的语句,如果引发异常,则执行过程会跳到第一个 except 语句。
如果第一个 except 中定义的异常与引发的异常匹配,则执行该 except 中的语句。
如果引发的异常不匹配第一个 except,则会搜索第二个 except,允许编写的 except 数量没有限制。
如果所有的 except 都不匹配,则异常会传递到下一个调用本代码的最高层 try 代码中。

4 异常中的 else

如果判断完没有某些异常之后还想做其他事,就可以使用下面这样的 else 语句。

try:
  <语句>
except <异常名1>:
  print('异常说明1')
except <异常名2>:
  print('异常说明2')
else:
  <语句> # try语句中没有异常则执行此段代码

5 异常中的 finally

try…finally…语句无论是否发生异常都将会执行最后的代码。

try:
  <语句>
finally:
  <语句>

看一个示例:

str1 = 'hello world'
try:
  int(str1)
except IndexError as e:
  print(e)
except KeyError as e:
  print(e)
except ValueError as e:
  print(e)
else:
  print('try内没有异常')
finally:
  print('无论异常与否,都会执行我')

6 raise 主动触发异常

可以使用 raise 语句自己触发异常,raise 语法格式如下:

raise [Exception [, args [, traceback]]]
语句中 Exception 是异常的类型(例如 ValueError),参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是 "None"。最后一个参数是跟踪异常对象,也是可选的(在实践中很少使用)。

看一个例子:

def not_zero(num):
  try:
    if num == 0:
      raise ValueError('参数错误')
    return num
  except Exception as e:
    print(e)
not_zero(0)

7 采用 traceback 模块查看异常 (RPA 已默认封装)

发生异常时,Python 能“记住”引发的异常以及程序的当前状态。Python 还维护着 traceback(跟踪)对象,其中含有异常发生时与函数调用堆栈有关的信息。记住,异常可能在一系列嵌套较深的函数调用中引发。程序调用每个函数时,Python 会在“函数调用堆栈”的起始处插入函数名。一旦异常被引发,Python 会搜索一个相应的异常处理程序。如果当前函数中没有异常处理程序,当前函数会终止执行,Python 会搜索当前函数的调用函数,并以此类推,直到发现匹配的异常处理程序,或者 Python 抵达主程序为止。这一查找合适的异常处理程序的过程就称为“堆栈辗转开解”(StackUnwinding)。解释器一方面维护着与放置堆栈中的函数有关的信息,另一方面也维护着与已从堆栈中“辗转开解”的函数有关的信息。

格式如下:

try:
  block
except:
  traceback.print_exc()

举个例子:

try:
  1/0
except Exception as e:
  print(e)

如果我们这样写的话,程序只会报“division by zero”错误,但是我们并不知道是在哪个文件哪个函数哪一行出的错。

下面使用 traceback 模块,官方参考文档:https://docs.python.org/2/library/traceback.html

import traceback

try:
  1/0
except Exception as e:
  traceback.print_exc()

这样就会帮我们追溯到出错点:

Traceback (most recent call last):
File “E:/PycharmProjects/ProxyPool-master/proxypool/test.py”, line 4, in
1/0
ZeroDivisionError: division by zero

另外,traceback.print_exc()跟 traceback.format_exc() 有什么区别呢?

区别就是,format_exc()返回字符串,print_exc() 则直接给打印出来。即 traceback.print_exc()与 print(traceback.format_exc()) 效果是一样的。print_exc() 还可以接受 file 参数直接写入到一个文件。比如可以像下面这样把相关信息写入到 tb.txt 文件去。

traceback.print_exc(file=open(‘tb.txt’,‘w+’))

相关推荐

Python Flask 容器化应用链路可观测

简介Flask是一个基于Python的轻量级Web应用框架,因其简洁灵活而被称为“微框架”。它提供了Web开发所需的核心功能,如请求处理、路由管理等,但不会强制开发者使用特定的工具或库。...

Python GUI应用开发快速入门(python开发软件教程)

一、GUI开发基础1.主流GUI框架对比表1PythonGUI框架比较框架特点适用场景学习曲线Tkinter内置库,简单小型应用,快速原型平缓PyQt功能强大,商用许可专业级桌面应用陡峭PySi...

【MCP实战】Python构建MCP应用全攻略:从入门到实战!

实战揭秘:Python Toga 打造跨平台 GUI 应用的神奇之旅

在Python的世界里,GUI(图形用户界面)开发工具众多,但要找到一款真正跨平台、易于使用且功能强大的工具并不容易。今天,我们就来深入探讨一下Toga——一款Python原生、操作系统原...

python应用目录规划(python的目录)

Python大型应用目录结构规划(企业级最佳实践)核心原则模块化:按业务功能拆分,高内聚低耦合可扩展性:支持插件机制和动态加载环境隔离:清晰区分开发/测试/生产环境自动化:内置标准化的构建测试部署流...

Python图形化应用开发框架:PyQt开发简介

PyQt概述定义:PyQt是Python绑定Qt框架的工具集,用于开发跨平台GUI应用程序原理:通过Qt的C++库提供底层功能,PyQt使用SIP工具生成Python绑定特点:支持Windows/ma...

[python] 基于PyOD库实现数据异常检测

PyOD是一个全面且易于使用的Python库,专门用于检测多变量数据中的异常点或离群点。异常点是指那些与大多数数据点显著不同的数据,它们可能表示错误、噪声或潜在的有趣现象。无论是处理小规模项目还是大型...

Python、Selenium 和 Allure 进行 UI 自动化测试的简单示例脚本

环境准备确保你已经安装了以下库:SeleniumAllurepytest你可以使用以下命令安装所需库:pipinstallseleniumallure-pytestpytest示例代码下面的代...

LabVIEW 与 Python 融合:打造强大测试系统的利器

在现代测试系统开发领域,LabVIEW和Python各自凭借独特优势占据重要地位。LabVIEW以图形化编程、仪器控制和实时系统开发能力见长;Python则凭借丰富的库资源、简洁语法和强大数...

软件测试进阶之自动化测试——python+appium实例

扼要:1、了解python+appium进行APP的自动化测试实例;2、能根据实例进行实训操作;本课程主要讲述用python+appium对APP进行UI自动化测试的例子。appium支持Androi...

Python openpyxl:读写样式Excel一条龙,测试报表必备!

无论你是测试工程师、数据分析师,还是想批量导出Excel的自动化工作者,只需一个库openpyxl,即可高效搞定Excel的各种需求!为什么选择openpyxl?支持.xlsx格式...

Python + Pytest 测试框架——数据驱动

引言前面已经和大家介绍过Unittest测试框架的数据驱动框架DDT,以及其实现原理。今天和大家分享的是Pytest测试框架的数据驱动,Pytest测试框架的数据驱动是由pytest自...

这款开源测试神器,圆了我玩游戏不用动手的梦想

作者:HelloGitHub-Anthony一天我在公司用手机看游戏直播,同事问我在玩什么游戏?我和他说在看直播,他恍然大悟:原来如此,我还纳闷你玩游戏,咋不用动手呢。。。。一语惊醒梦中人:玩游戏不用...

Python单元测试框架对比(pycharm 单元测试)

一、核心框架对比特性unittest(标准库)pytest(主流第三方)nose2(unittest扩展)doctest(文档测试)安装Python标准库pipinstallpytestp...

利用机器学习,进行人体33个2D姿态检测与评估

前几期的文章,我们分享了人脸468点检测与人手28点检测的代码实现过程,本期我们进行人体姿态的检测与评估通过视频进行人体姿势估计在各种应用中起着至关重要的作用,例如量化体育锻炼,手语识别和全身手势控制...

取消回复欢迎 发表评论: