Python--一言不合就try一下?

news/2024/11/23 0:41:49/

这里需要注意的是错误是Error,异常是Exception。 异常是可以被捕捉的,被处理的,但是错误是不能被捕获的。异常官方文档

我们一般情况下,习惯性的叫pycharm控制台给出的红色字体叫报错。其实不然,是异常。

异常产生: raise语句显示的抛出异常 Python解释器自己检测到的异常,并引发它 

print(1/0)
"""print(1/0)
ZeroDivisionError: division by zero
"""
def fuc(num):if num == 1:raise Exception('错了呢')
fuc(1)
"""raise Exception('错了呢')
Exception: 错了呢
"""

看示例一中带有Error,实则并非正真的错误,它是由一层一层代码结构继承下来的,可以理解为继承自异常类下的Error类名。 

捕获异常

try:print("正在捕捉")print(1/0)
except ZeroDivisionError:print("不可以除0")
"""
正在捕捉
不可以除0
"""

多个except

try:n = int(input('请输入一个数字:'))print(n)
except ValueError:print("输入整数啦")
except KeyError:print("key not found")
except FileNotFoundError:print("file not found")

:::danger 在try后面,可以接多个except,在异常后,会精准输出对应的异常提示。 :::

except与打印指定信息

正常情况下,except可以捕捉错误类型,且打印指定的错误信息 

那么有没有一种方法可以直接访问捕捉异常呢,俗称:只想捕捉异常并直接打印对应信息。肯定有的 

class Myexception(Exception):def __init__(self,code,message):self.code = codeself.message = messagetry:raise Myexception(code="404",message="Not")
except ValueError:print("输入整数啦")
except KeyError:print("key not found")
except FileNotFoundError:print("file not found")
except:print("我啥都捕捉")
"""
我啥都捕捉
"""

不论在何时都可以使用except。这里写的复杂例子后续还有其他内容要说。 Myexception继承自Exception,并且初始化了。这跟源码有关系。

不同层次的打印信息

正常情况下我们是直接捕捉错误并且print的。 还有另一种方式:

class Myexception(Exception):def __init__(self,code,message):self.code = codeself.message = messagetry:raise Myexception(code="404",message="Not")
except ValueError:print("输入整数啦")
except KeyError:print("key not found")
except FileNotFoundError:print("file not found")
except Exception as e:print(e)print(e.code,e.message)print("我就是猖狂,我全部揽下来")

那就是as e的方式,我们需要在抛出异常的时候传入初始化参数,也就是报错提示,随后捕捉的时候使用.code,.message的方式输出。这里的e,也可以是其他的东西,类似于变量。

finally

可以理解为只要写了它,不论如何都会执行先关语句。在退出try的时候总是会执行。

try:f  = open('test')
except ValueError as e:print(e.args,e.__dict__,sep='||')
except Exception as e:print(e.args,e.__dict__,sep='||')
finally:print("不论怎么样,我都会执行")
"""
(2, 'No such file or directory')||{}
不论怎么样,我都会执行
"""

可以看到即使异常了,也还是会执行的。sep的用法,请看零散小方法

else

在没有异常的时候执行这个语句

try:print(1//1)
except ValueError as e:print(e.args,e.__dict__,sep='||')
except Exception as e:print(e.args,e.__dict__,sep='||')
else:print("No Exception,action")
"""
1
No Exception,action
"""

finally和else

try:print(1//1)
except ValueError as e:print(e.args,e.__dict__,sep='||')
except Exception as e:print(e.args,e.__dict__,sep='||')
else:print("No Exception,action")
finally:print("Start Action , Show Time")
"""
1
No Exception,action
Start Action , Show Time
"""

这二者可以结合使用,此外你也可以在这其中加入一系列的代码,例如for循环,if判断等

小结

1、如果try中语句执行时发生异常,搜索except子句,并执行第一个匹配该异常的except子句 2、如果try中语句执行时发生异常,却没有匹配的except子句,异常将被递交到外层的try,如果外层不处理这个异常,异常将继续向外层传递。如果都不处理该异常,则会传递到最外层,如果还没有处理,就终止异常所在的线程 3、如果在try执行时没有发生异常,如有else子句,可执行else子句中的语句 4、无论try中是否发生异常,finally子句最终都会执行


http://www.ppmy.cn/news/59476.html

相关文章

利用Python如何实现数据驱动的接口自动化测试

目录 前言 1、需求 2、方案 3、实现 总结 前言 大家在接口测试的过程中,很多时候会用到对CSV的读取操作,本文主要说明Python3对CSV的写入和读取。下面话不多说了,来一起看看详细的介绍吧。 1、需求 某API,GET方法&#xff…

Vulkan实战之Instance

文章目录 创建实例(**Creating an instance**)检查扩展支持(**Checking for extension support**)销毁清除(**Cleaning up**)最终代码 创建实例(Creating an instance) 您需要做的第一件事是通过创建一个实例来初始化Vulkan库。实例是应用程序和Vulkan库之间的连接&#xff0c…

Android9.0 原生系统SystemUI下拉状态栏和通知栏视图之锁屏通知布局

1.前言 在9.0的系统rom定制化开发中,对于系统原生systemui的锁屏界面的功能也是非常重要的,所以在锁屏页面布局中,也是有通知栏布局的,所以接下来对于息屏亮屏 通知栏布局的相关流程分析,看下亮屏后锁屏页面做了哪些功能 2.原生系统SystemUI下拉状态栏和通知栏视图之锁…

总结一下vue的关键字和用处

Vue.js 是一个轻量级的 JavaScript 框架,用于构建用户界面和单页面应用程序。下面是一些 Vue.js 中的关键字和它们的用途: v-bind:用于动态绑定属性和事件监听器。例如,可以用 v-bind 绑定一个元素的属性(如&#xff…

node.js的核心模块

node的核心模块由一些精简而高效的库组成 文章目录 全局对象全局对象和全局变量processcosole utilutils.inheritsutils.inspect 事件机制事件发射器error 事件继承EventEmitter 文件系统访问fs.readFile(filename,[encoding],[callback(err,data)])fs.readFileSync(filename,…

Python小姿势 - ## Python中的迭代器与生成器

Python中的迭代器与生成器 在Python中,迭代是一个非常重要的概念,迭代器和生成器是迭代的两种最常见的形式。那么,迭代器与生成器有何不同呢? 首先,我们先来了解一下迭代器。 迭代器是一种对象,它可以记住遍…

Kubernetes云原生实战05 一键安装三主三从高可用集群

大家好,我是飘渺。 今天咱们继续更新Kubernetes云原生实战系列,本节文章会使用Kubekey安装一个三主三从的高可用集群。 在开始之前请分别登录kubernets集群节点,分别修改节点的主机名,跟第一章中提到的节点规划表保持一致。 hostnamectl set-hostname k8s-master1 hostn…

Activiti7流程操作详解

一、Activiti流程操作步骤 定义流程,按照BPMN的规范,使用流程定义工具,用流程符号把整个流程描述出来 部署流程,把画好的流程定义文件,加载到数据库中,生成表的数据 启动流程,使用java代码来操…