防止恶意点击软件管用吗,宁波优化推广选哪家,中国肩章大全图解,wordpress.短视频主题关于错误和异常
#xff08;1#xff09;概念#xff1a;错误是无法通过其他代码进行处理问题#xff0c;如语法错误和逻辑错误#xff0c;语法错误是单词或格式等写错#xff0c;只能根据系统提示去修改相应的代码#xff0c;逻辑错误是代码实现功能的逻辑有问题…关于错误和异常
1概念错误是无法通过其他代码进行处理问题如语法错误和逻辑错误语法错误是单词或格式等写错只能根据系统提示去修改相应的代码逻辑错误是代码实现功能的逻辑有问题系统不会报错也是只能找到相应的代码进行修改异常是程序执行过程中出现的未知问题这里语法和逻辑都是正确的可以通过其他代码进行处理修复如可以通过if判定语句来避免对年龄进行赋值时输入了字符而出现异常的情况如使用捕捉异常可以避免除零异常等
2关于常见的系统异常
除零异常(ZeroDiviceError)被除数写成了0
名称异常(NameError)变量未定义
类型异常(TypeError)不同类型数据进行相加
索引异常(IndexError)超出索引范围
键异常(KeyError)没有对应名称的键
值异常(ValueError)将字符型数据转换成整型数据
属性异常(AttributeError)对象没有对应名称的属性
迭代器异常(StopIteration)迭代次数超出迭代器内容个数、 3关于python异常的继承关系树图 4异常的解决思路
系统内置了很多应用场景我们在运行程序过程中一旦触发相关场景系统就会向外抛出相应的问题这就是系统抛出的异常
预防添加容错处理代码虽会触发异常但使用容错处理可以不让异常被触发
解决如果容错代码过多时会使得整个程序非常混乱这时可以使用捕捉异常进行处理
解决方案1--捕捉异常的完整机构如下 注意1
try:1 / 0print(name)
except ZeroDivisionError as z:print(除零错误)
except NameError as n:print(名字错误)
else:print(代码没错)
finally:print(后续代码执行)
# -------运行结果-------
# 除零错误
# 后续代码执行 这里当1 / 0 执行时出现异常会跳过print(name)去执行except ZeroDivisionError as z:进行捕捉从而不会去执行print(name)故后面对其的捕捉也是无效的
注意2
try:# 1 / 0print(name)
except (ZeroDivisionError, NameError) as z:print(异常)
else:print(代码没错)
finally:print(后续代码执行)
# -------运行结果-------
# 异常
# 后续代码执行
这里如果对多个异常的处理是相同的则可以将这些异常进行合并处理
注意3
try:# 1 / 0print(name)
except Exception as z:print(异常)
else:print(代码没错)
finally:print(后续代码执行)
# -------运行结果-------
# 异常
# 后续代码执行
如果不知道具体是什么异常可以直接使用Exception进行捕捉因为这些常见的异常都是继承自Exception的
注except和else语句只执行一个
8自定义异常
1 用户自定义异常首先需要继承Exception类
2 raise语句的语法格式为
raise [Exception [, args [, traceback]]]
语句中 Exception 是异常的类型例如NameError参数标准异常中任一种args 是自已提供的异常参数。
最后一个参数是可选的在实践中很少使用如果存在是跟踪异常对象。
3为了能够捕获异常except语句必须有用相同的异常(或者直接抛出Exception来抛出类对象或者字符串。
4当类自己定义了__str__(self)方法那么当raise这个类实例时就会返回从这个方法中return的数
class Xerror(Exception):def __init__(self, mag, code_error):self.mag magself.code_error code_errorpassdef __str__(self):return self.mag str(self.code_error)
def ageSet(age):if age 0 or age 200:raise Xerror(不符合, 404)else:print(小明的年龄是%d % age)
try:ageSet(-18)
except Exception as x:print(cunwu, x)
由于常见异常都是继承自Exception类的座椅这里可以自定义一个继承了Exception的子类在向外抛出异常时即raise Xerror(不符合, 404) 可以看成是创建一个Xerror实例对象并对其初始化属性进行赋值然后利用__str__()方法对实例对象进行描述这就是自定义异常的方法在最后可以对抛出的异常进行捕捉
实现异常类比较好的做法是将所有自定义异常放在一个单独的文件中例如exceptions.py 或 errors.py许多标准模块也都是这样做的。
既然自定义异常是类那么它必然可以实现一个普通类能做的所有事情。但一般而言应该尽量保持简单、简洁。大多数实现都是声明一个自定义基类并从这个基类派生出其他的由程序引发的异常类。这是 Python 中实现自定义异常的标准方法但并不仅限于这种方式。
总结
自定义异常类需要继承自Exception类。自定义异常类需要实现__str__方法来定义需要抛出的异常信息。raise语句主动抛出异常。捕获异常需要通过try...except 语句其中except语句必须有用相同的异常(或者直接抛出Exception来抛出类对象。
参考自https://blog.csdn.net/zx870121209/article/details/81477329
https://blog.csdn.net/qq_35462323/article/details/91418650?biz_id102utm_termpython%20%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BC%82%E5%B8%B8utm_mediumdistribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-91418650spm1018.2118.3001.4187