当前位置: 首页 > news >正文

python异常处理

参考语法:https://docs.python.org/zh-cn/3/tutorial/errors.html
在编写代码的时候,如果你写的程序出现报错,程序就会停止运行,后面的代码就不再执行。
如果程序发生错误,可以在代码中添加异常处理,保证程序能够执行。

基本使用方式

下面的代码,运行的过程中有什么风险?


num = int(input("请输入一个数字:"))if num > 100:print("yes")
else:print("No")print("程序执行完毕")

上面的程序,如果输入的数据是数字,能够正常执行,
但是如果输入的数据是 非数字,程序报错,不再往下执行。
在这里插入图片描述

异常处理

try … except…

在代码可能出现异常的地方进行异常处理,比如,上面的程序,通过报错信息可以看到, 第三行代码,抛出valueerror的错误。
在这里插入图片描述
进行异常处理。


try:num = int(input("请输入一个数字:"))if num > 100:print("yes")else:print("No")# 当出现valueError的时候
except ValueError:print("输入的数据有误,请使用数字输入!")print("程序执行完毕")

将可能出现的异常代码放在 try 语句块中
异常信息捕获代码放在 except 中。
再次执行
在这里插入图片描述

try … except… 多个异常

下面查看这段代码。

# 打开文件 文件读取权限
f = open(file='helloworld.txt',mode='r')
# 读取文件中的内容
data = f.readline()
# 将读取的内容转换为数字
a = int(data)

这段代码有可能出现两种错误。

  • 文件不存在
  • 内容转为数字的时候会出现问题。
  • 在这里插入图片描述
    如果当发生异常的时候,可以统一处理。
try:# 打开文件 文件读取权限f = open(file='helloworld.txt',mode='r')# 读取文件中的内容data = f.readline()# 将读取的内容转换为数字a = int(data)
except (FileNotFoundError,ValueError):print("发生未知错误! 请检查")
  • except (FileNotFoundError,ValueError): 将两个异常放在一起,只要发生其中一个就处理。

也可以分开处理异常

针对上面的异常,也可以分开处理。
针对不同异常,单独处理。

try:# 打开文件 文件读取权限f = open(file='helloworld.txt',mode='r')# 读取文件中的内容data = f.readline()# 将读取的内容转换为数字a = int(data)# 文件找不到异常
except FileNotFoundError:print("文件找不到,请检查文件路径")
except ValueError:print("数据转换问题,请检查数据")

try … except Excpetion

上面处理异常是基于自己对程序已知可能出现的异常。如果对程序也不知道会发生那种类型的异常。也可统一使用 Expectation 来捕获所有的异常。

try:b = 10/0# 打开文件 文件读取权限f = open(file='helloworld.txt',mode='r')# 读取文件中的内容data = f.readline()# 将读取的内容转换为数字a = int(data)# 文件找不到异常
except FileNotFoundError:print("文件找不到,请检查文件路径")
except ValueError:print("数据转换问题,请检查数据")
except Exception:print("发生未知异常")

exception 在使用的时候,放在最后位置。

raise 抛出异常

while True:print('我爱学习')# 手动抛出异常,程序会停止运行raise Exception

后面做UI自动化的时候,需要定位元素,当元素等待不出来的时候,不能一直等,可以手动抛出异常。
在这里插入图片描述

在程序运行的过程中,无法保证每一次运行都顺利,那么就有可能会出现异常,那么对异常会怎样处理呢?

异常情况 
try: 后面写的是有可能出现异常的代码 
except: 如果出现异常了,想要显示的代码 
else: 如果没有出现异常,你后续想要处理的代码 
finally: 不管出不出现异常,都会执行的代码try: a = 10 b = "20" print(a + b) 
except TypeError as t: print("代码出bug啦!,导致问题的原因是:{}".format(t)) 
else: print("代码非常成功!真棒!") 
finally: print("----欢迎再次光临-----") 

常见的异常类型:

NameError: 变量没定义
SyntaxError: 语法错误
KeyError: 键不存在
ModuleNotFountError:模块未找到
TypeError:类型错误

指定异常类型捕获:

异常捕获时:语法错误是捕获不到的。如果要捕获多个异常类型:
方式一:使用多个except,每一个except都可以指定捕获的异常类型,适合不同类型的异常做不同的处理
方式二:使用一个except捕获多个类型的异常,使用多个类型的 异常采用相同的处理方式

try: print(a) f = open("fff.txt","r",encoding="utf8") 
except (NameError,FileNotFoundError,KeyError) as error: print(error) print("代码有异常") 
except FileNotFoundError as error: print(error) 
else: print("代码没有异常") 
finally: print("代码不管有没有异常都会执行") 
try: print(a) 
except Exception: print("捕获到了异常") 

logging日志

日志模块

日志在程序中必不可少,日志会记录程序员的操作记录和用户的行为记录,以及异常的日志打印
python中如何去记录日志?
首先我们要引入logging模块

import logging

python的日志等级

debug 输出详细的运行环境,主要用于调试
info 确认一切按预期运行,一般用于输出重要运行情况
warning 一些意想不到的情况发生了 比如内存空间不足,但是软件还能继续工作
error 某些程序因为一些原因没有执行,发生了错误,但程序还会继续执行不会崩溃
critical 致命的,一些严重的错误会被记录。程序无法继续运行,导致崩溃

logging.debug("这是debug等级的日志")
logging.info("这是info等级的日志")
logging.warning("这是warning等级的日志")
logging.error("这是error等级的日志")
logging.critical("这是critical等级的日志")

logging就是日志模块

import logging
import py_apitest
#日志的严重级别debug  info  warning  error  critical
logging.warning("这是info等级的日志")
print("这是print的内容")日志中的root叫做日志收集器,root默认的收集器不输出debug 和 info的等级日志。

logging具体代码

#1.首先创建日志收集器
mylog = logging.getLogger("libai")
#2.创建日志收集器收集的日志等级
mylog.setLevel("DEBUG")
#3.设置输入到控制台的渠道
sh = logging.StreamHandler()
#4.设置日志输出渠道的等级
sh.setLevel("DEBUG")
#5.将输出渠道添加进日志收集器中
mylog.addHandler(sh)
#6.将输出的日志添加进一个文件中
fh = logging.FileHandler("xiaosun.log","a",encoding="utf8")
#7.再给这个日志文件设置输入的等级
fh.setLevel("DEBUG")
#8.把文件输出内容添加进日志收集器中
mylog.addHandler(fh)
#9.设置工作中的日志文件输出格式
formater = '%(asctime)s - [%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s'
#10.把这个格式带入进日志中
fm = logging.Formatter(formater)
#11.将日志的格式与输出渠道进行绑定
fh.setFormatter(fm)
sh.setFormatter(fm)
#12.打印日志
mylog.debug(py_apitest.newbee_login())
mylog.warning("这是warning的日志文件内容")

相关文章:

python异常处理

参考语法:https://docs.python.org/zh-cn/3/tutorial/errors.html 在编写代码的时候,如果你写的程序出现报错,程序就会停止运行,后面的代码就不再执行。 如果程序发生错误,可以在代码中添加异常处理,保证程…...

go get命令不再具有安装功能

go get功能呢 一直以来,我们知道go get命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。整个过程就像安装一个App一样简单。 go get命令可以动态获取远程代码包,命令在内部实际上分成了两步操作&#x…...

合宙Air724UG LuatOS-Air lvgl7-lvgl(矢量字体)

如何用开发板实现lvgl加载外部矢量字体功能 目录名称 如何用开发板实现lvgl加载外部矢量字体功能 简介材料准备API 说明步骤 1. 将字库芯片接在模块spi上2. 版本定制3. 初始化spi4. 设置字体5.字体使用测试固件和脚本显示效果字号灰度最佳粗细值对应表常见问题 1. 设置68号字体…...

LRU的实现

题目内容 实现一个 LRUCache 类,三个接口: LRUCache(int capacity) 创建一个大小为 capacity 的缓存get(int key) 从缓存中获取键为 key 的键值对的 valueput(int key, int value) 向缓存中添加键值对 (key, value) 要求 get 和 put 的均摊时间复杂度…...

consul 备份还原导入导出

正文 工作中要保证生产环境部署的consul的集群能够安全稳定地对外提供服务,即使出现系统故障也能快速恢复,这里将讲述部分的备份还原操作及KV的导入导出操作。 备份与还原 配置文件、服务器状态 需要备份的主要有两类数据:consul相关的配置文…...

6.网络编程套接字(下)

文章目录 4.TCP流套接字编程4.1ServerSocket API4.2Socket API4.3TCP中的长短连接4.4示例一:一发一收(长连接)4.4.1TCP服务端4.4.2TCP客户端 4.5示例二:请求响应(短连接)4.5.1TCP服务端4.5.2TCP客户端 4.6再…...

4.3-内置后置PostProcess处理器深度讲解

在reader里面注册了很多Bean定义 reader会调取register()来注册配置类 调用上句,就会把配置类注册到BeanDefinitionMap中去 配置类有了、解析配置类的处理器有了 然后, 在第三步refresh() 进行IOC容器刷新中的invokeBeanPostProcessors(beanFactory…...

LeetCode(力扣)45. 跳跃游戏 IIPython

LeetCode45. 跳跃游戏 II 题目链接代码 题目链接 https://leetcode.cn/problems/jump-game-ii/description/ 代码 class Solution:def jump(self, nums: List[int]) -> int:if len(nums) 1:return 0curdis 0nextdis 0step 0for i in range(len(nums)):nextdis max(…...

mysql5.8 免安装版(压缩包)win10 安装

目录 1、下载MySQL5.82、如何安装、配置my.ini配置注意 3初始化mysql3.1. 初始化mysql3.2. 安装mysql服务3.3. 启动mysql3.4. 登录mysql3.5. 修改root密码3.6. 配置远程连接 Mysql5.8安装踩坑记录,推荐使用Docker安装,我是电脑虚拟化可能会蓝屏没用这个功…...

STM32-HAL库06-硬件IIC驱动FM24CL16B非易失存储器

STM32-HAL库06-IIC驱动FM24CL16B非易失存储器 一、所用材料: STM32VGT6自制控制板 STM32CUBEMX(HAL库软件) MDK5 二、所学内容: 通过HAL库的硬件IIC对FM24CL16B存储器进行写与读取操作。 三、CUBEMX配置: 第一步…...

python-wordcloud词云

导入模块 from wordcloud import WordCloud import jieba import imageio import matplotlib.pyplot as plt from PIL import ImageGrab import numpy as npwordcloud以空格为分隔符号,来将文本分隔成单词 PIL pillow模块 img imageio.imread(image.png)这行代码…...

单元测试与自测

单元测试在百度百科的定义: 自测在百度百科的定义: 单元测试是测一个类或一个函数,自立门第main函数,不依赖于项目,预期的是这个类或函数是没有问题的。程序编码完成之后至各种测试再到用户使用出现的任何bug都是单元测…...

2023-09-12 LeetCode每日一题(课程表 IV)

2023-03-29每日一题 一、题目编号 1462. 课程表 IV二、题目链接 点击跳转到题目位置 三、题目描述 你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] [ai, bi] 表示如果你…...

RabbitMQ基础

目录 MQ MQ概述 MQ 的优势 1.应用解耦 2.异步提速 3.削峰填谷 MQ 的劣势 1.系统可用性降低 2.系统复杂度提高 3.一致性问题 使用 MQ 需要满足什么条件呢? RabbitMQ 简介 ​编辑RabbitMQ 中的相关概念 RabbitMQ 提供了 6 种工作模式 JMS java实现Ra…...

ITIL 4—创建、交付和支持—创建、交付和支持服务的价值流

4. 创建、交付和支持服务的价值流 本章节提供了有关如何: 记录一个价值流以理解工作流程如何贯穿该组织了解创建一个新服务的原型价值流了解支持一个现场服务的原型价值流 本章将帮助从业者理解: 价值流在 服务价值系统(SVS) 中的作用价值流的分类如…...

微信怎么给自己发消息

前段时间看到一份数据调查,说是到目前为止,全球使用微信的用户已达到10亿多人次,天啊,多么强大的用户群体! 这么多人喜欢使用微信,相信大家都知道,微信里面有一个特俗功能,可以自己…...

正交试验设计法

正交实验设计 一、什么是正交试验设计法? 是一种成对测试交互的系统的统计方法。它提供了一种能对所有变量对的组合进行典型覆盖(均匀分布)的方法。 可以从大量的试验点中挑出适量的、有代表性的点,利用“正交表”,…...

Scrum工具:助力快速迭代和高效交付

​随着软件开发行业的不断发展,敏捷开发方法逐渐成为了主流。Scrum作为敏捷开发中最具代表性的工具之一,其在流程设计、团队协作以及项目管理等方面发挥着重要作用。本文将深入探讨Scrum的优势以及如何运用Scrum提升团队效率与质量。 一、Scrum敏捷开发工…...

通过Python行命令搭建HTTP服务器结合内网穿透实现外网访问

文章目录 1.前言2.本地http服务器搭建2.1.Python的安装和设置2.2.Python服务器设置和测试 3.cpolar的安装和注册3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 Python作为热度比较高的编程语言,其语法简单且语句清晰,而且python有…...

Android T 窗口层级其三 —— 层级结构树添加窗口

文章目录 序节点添加Task以DefaultTaskDisplayArea为父节点以Task为父节点 ActivityRecordWindowTokenWindowState以WindowToken为父节点以ActivityRecord为父节点 小结调用场景添加差异 流程分析添加log堆栈打印流程LauncherStatusBar 序 尚未添加窗口的层级结构树&#xff0…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

python打卡day49

知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

dify打造数据可视化图表

一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...