python异常处理

python异常处理,第1张

概述异常处理 异常和错误 程序中错误分类 1.语法错误(程序执行前改正) 2.逻辑错误 什么是异常? 异常就是程序运行时发生错误的信号 python中常见的异常种类 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误。 AttributeError # 试图访问一个对象没有的树形,比如foo.x,但是foo没有属 异常处理 异常和错误 程序中错误分类

1.语法错误(程序执行前改正)

2.逻辑错误

什么是异常?

异常就是程序运行时发生错误的信号

python中常见的异常种类

在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误。

AttributeError # 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError # 输入/输出异常;基本上是无法打开文件importError # 无法引入模块或包;基本上是路径问题或名称错误IndentationError # 语法错误(的子类) ;代码没有正确对齐IndexError # 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]KeyError # 试图访问字典里不存在的键KeyboardInterrupt # Ctrl+C被按下nameError # 使用一个还未被赋予对象的变量SyntaxError # Python代码非法,代码不能编译(个人认为这是语法错误,写错了)TypeError # 传入对象类型与要求的不符合UnboundLocalError # 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它ValueError # 传入一个调用者不期望的值,即使值的类型是正确的
ArithmeticErrorAssertionErrorAttributeErrorBaseExceptionBufferErrorBytesWarningDeprecationWarningEnvironmentErrorEOFErrorExceptionfloatingPointErrorFutureWarningGeneratorExitimportErrorimportWarningIndentationErrorIndexErrorIOErrorKeyboardInterruptKeyErrorLookupErrorMemoryErrornameErrorNotImplementedErrorOSErrorOverflowErrorPendingDeprecationWarningReferenceErrorRuntimeErrorRuntimeWarningStandardErrorstopiterationSyntaxErrorSyntaxWarningSystemErrorSystemExitTabErrorTypeErrorUnboundLocalErrorUnicodeDecodeErrorUnicodeEncodeErrorUnicodeErrorUnicodeTranslateErrorUnicodeWarningUserWarningValueErrorWarningZerodivisionError
异常处理 什么是异常?

异常发生之后,异常之后的代码就不执行了

什么是异常处理?

python解释器检测到错误,触发异常(也允许程序员自己触发异常)

程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)

如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理

为什么要进行异常处理?

增强你程序的鲁棒性与容错性

如何进行异常处理?

这里指的异常由程序的错误引起的,语法上的错误跟异常处理无关,必须在程序运行前就修正

异常处理的两种方式:

1.if判断式

2.python专有异常处理

if判断式

总结:

1.if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理。

2.在你的程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差

3.if是可以解决异常的,只是存在1,2的问题,所以,千万不要妄下定论if不能用来异常处理。

python专有异常处理

python:为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行异常处理

1.基本语法:
# 异常捕获基本格式:try:     被检测的代码块except 异常类型:     try中一旦检测到异常,就执行这个位置的逻辑
f = open('1.txt')g = (line.strip() for line in f)try:    for i in g:        print(i)except stopiteration:    f.close()
2.异常类只能用于处理指定的异常情况
s1 = 'hello'try:    int(s1)except IndexError as e:    print(e)# 未捕获到异常,程序直接报错
3.处理多分支
s1 = 'hello'try:    int(s1)except IndexError as e:    print(e)except KeyError as e:    print(e)except ValueError as e:    print(e)
4.万能异常:Exception

利用万能异常定制不同逻辑:

def func():    print(111)def func1():    print(222)dic = {1:func,2:func1}while True:    try:        user = int(input('请输入数字:'))        dic[user]()        break    except ValueError:        print("请输入数字")    except KeyError:        print("不在索引之内")    except Exception:        print("意外错误")
5.异常的其他机构

try else finally

try:    dic = {'name':"alex"}    print(dic['age'])    l1 = [1,2,3]    print(l1[100])except KeyError:    print("没有此键")except IndexError:    print("没有此下标")else:    print("如果没有出现异常则执行这里")finally:    print('finally 666')

总结:

? 1.except 必须依赖于try,else必须依赖于except和try

? 2.finally只是依赖于try.

? 3.finally : 在异常出现之前,执行finally语句(异常捕获不算错误)

? 4.finally 用在 关闭数据库连接,文件句柄关闭,数据保存等,用到finally.

def func():    try:        print(111)        return 666    finally:        print(222)print(func())
6.主动触发异常
class A:    def func(self):        raise Exception("使用父类方法")class B(A):    def func(self):        print("in B func")class C(A):    def func(self):        print("in C func")class D(A):    def func1(self):        print("in D func1")def function(obj):    obj.func()obj1 = D()function(obj1)# 结果:Exception: 使用父类方法
try:    raise TypeError('类型错误')except Exception as e:    print(e)
7.自定义异常
class EvaException(BaseException):    def __init__(self,msg):        self.msg = msg    def __str__(self):        return self.msgtry:    raise EvaException("类型错误")except EvaException as e:    print(e)
8.断言

断言: 展现出一种强硬的态度,若条件不成立,立马报错,结束下面的执行语句

# assert 条件assert 1 == 1assert 1 == 2
9.try..except的方式比较if的方式的好处

? 1.改善代码容错性

? 2.增强程序鲁棒性

10.万能异常与多分支的比较

什么时候用万能? 什么时候用多分支?

? 如果你对错误信息不关心,只是想要排除错误让程序继续运行. 用万能异常.

? 你对错误信息要进行明确的分流,让你的程序多元化开发.

总结

以上是内存溢出为你收集整理的python异常处理全部内容,希望文章能够帮你解决python异常处理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1191901.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存