2021-02-05 Python异常处理

Python 异常处理

异常机制

异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等
所谓异常处理,就是指程序在出现问题时依然可以正确的执行剩余的程序,而不会因为异常而终止程序执行
python 中,引进了很多用来描述和处理异常的类,称为异常类,异常类定义中包含了该类异常的信息和对异常进行处理的方法
在这里插入图片描述
python 中一切都是对象,异常也采用对象的方式来处理

  1. 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该
    异常的一个对象
    ,停止当前执行路径,并把异常对象提交给解释器
  2. 捕获异常:解释器得到该异常后,寻找相应的代码来处理该异常

try except 结构

单个except 结构:

try:
被监控的可能引发异常的语句块
except BaseException [as e]:
异常处理语句块
BaseException可以替换成具体错误类别

多个except 结构:

try:
被监控的可能引发异常的语句块
except Exception1:
异常处理语句块1
except Exception2:
异常处理语句块2

except BaseException:
处理可能遗漏的异常
注意:如果Exception存在子类父类关系,先写子类

try…except…else 结构

如果try 块中没有抛出异常,则执行else 块;如果try 块中抛出异常,则执行except 块,不执行else 块

try…except…finally 结构

finally 块无论是否发生异常都会被执行;通常用来释放try 块中申请的资源

with 上下文管理

作为补充,可以通过with 上下文管理,更方便的实现释放资源的操作
with 上下文管理的语法结构如下:
with context_expr [ as var]:
语句块

with 上下文管理可以自动管理资源,在with 代码块执行完毕后自动还原进入该代码之前的现场或上下文,不论何种原因跳出with 块,不论是否有异常,总能保证资源正常释放

with open("d:/bb.txt") as f:
	for line in f:
		print(line)

return

return 有两种作用:结束方法运行、返回值
一般不把return 放到异常处理结构中,而是放到方法最后

常见异常

  1. SyntaxError: 语法错误
  2. NameError: 尝试访问一个没有申明的变量
  3. ZeroDivisionError: 除数为0错误
  4. ValueError: 数值错误
  5. TypeError: 类型错误
  6. AttributeError: 访问对象的不存在的属性
  7. IndexError: 索引越界异常
  8. KeyError: 字典的关键字不存在
    在这里插入图片描述
    在这里插入图片描述

traceback

使用traceback打印异常信息

#coding=utf-8
import traceback
try:
	print("step1")
	num = 1/0
except:
	# traceback.print_exc()
	with open("d:/a.log","a") as f:
		traceback.print_exc(file=f)

自定义异常类

自定义异常类一般都是运行时异常,通常继承Exception 或其子类即可,命名一般以Error、Exception 为后缀
自定义异常由raise 语句主动抛出

class AgeError(Exception):  # 继承Exception
    def __init__(self, errorInfo):
        Exception.__init__(self)
        self.errorInfo = errorInfo

    def __str__(self):
        return str(self.errorInfo) + ",年龄错误!应该在1-150 之间"

if __name__ == "__main__":  # 如果为True,则模块是作为独立文件运行,可以执行测试代码
    age = int(input("输入一个年龄:"))
    if age < 1 or age > 150:
        raise AgeError(age)
    else:
        print("正常的年龄:", age)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值