Python 异常处理
Python 异常处理
一、异常处理
- 概念
- 保证程序的健壮性和容错性。即程序在遇到错误时程序不会崩溃,我们需要对异常进行处理
- 作用
- 用户捕捉和未知的错误信息
- 基本异常处理结构语法
try:
检测的代码块01
检测的代码块02
检测的代码块03
检测的代码块04
检测的代码块05
except 异常类型 as e:
print("....将错误信息写入日志文件....")
如果"检测的代码快01\02"正常执行,但是执行到"检测的代码快03"时出现错误。那么就不会执行检测的代码块04\05,而是直接走except里的代码。如果try中代码都未报错,那么永远不会走except下的代码。
基本异常处理_实例
while True:
try:
A1 = input(">>>>>>:")
A2 = input(">>>>>>:")
A1 = int(A1)
A2 = int(A2)
A3 = A1 + A2
print(A3)
except Exception as e:
print("....Input Errors....")
# 当用户输入数字时不会出现错误.
# 输入字母时会出错.因为字母在进行int转换时无法进行转换
- 复杂异常处理结构语法
try:
代码_01
代码_02
代码_03
代码_04
代码_05
except 异常类型 as e:
print("....将错误信息写入到日志文件....")
else:
代码_06
代码_07
finally:
print(".....错误拉.....")
-
- 代码在执行时,第一步:正常执行try中代码。如果try中代码出现错误时,第二步:则直接执行except中代码。不会执行else中代码,第三步:执行finally中代码
- 代码在执行时,第一步:正常执行try中代码。如果try中代码未出现错误,第二步:则直接执行else中代码。不会执行except中代码,第三步:执行finally中代码
ps:finally是最后将执行的代码. 意思就是说:不管try中代码是否执行成功.都将执行这里的代码
复杂异常处理_实例
while True:
try:
A1 = input(">>>>>>:")
A2 = input(">>>>>>:")
A1 = int(A1)
A2 = int(A2)
A3 = A1 + A2
print(A3)
except Exception as e:
print("...Input Errors....")
else:
print("Perform successfully. No errors .Very good.")
finally:
print("..Come on Come on..")
# 测试一:用户正常输入数字
# 测试二:用户非正常输入数字
# 查看测试结果.
- 异常对象:
异常处理:except Exception as e(相当于obj): # python内部将错误信息封装到e对象中.Exception
此处的e(obj)就是对象. 封装了当前触发的错误信息.
class Message:
def __init__(self,name):
self.name = name
obj = Message("Harry")
- 异常种类:
在python中不同的异常可以用不同的类型(python中统一了类与类型. 类型即类)去标识.一个异常标识一种错误.
-
- Exception. 能将所有的异常都捕获.
- 其他异常种类. 只能处理某一中情况.
- 问:已经有能将所有的异常都捕获. 为什么还需要其他异常种类的?
- 答:能精确捕获异常的问题所在.
PS:如果不写Exception的话.只写单一的(如:ValueError)时.只要错误超出这个范围.则无法扑捉到.如下代码:
try:
li = [11,22,33,44,55]
li[10]
except ValueError as e: # python 内部将错误信息封装到e对象中. ValueError
print(e)
输出:
Traceback (most recent call last):
File "E:/Python_Engineering_Review/Day_08/06_异常处理.py", line 8, in <module>
li[10]
IndexError: list index out of range
- 报错是因为帮我们捕捉不到错误信息.. 如果想不报错.只打印出详细信息.如下代码:
try:
li = [11,22,33,44,55]
li[10]
except IndexError as e: # python 内部将错误信息封装到e对象中. IndexError
print(e)
输出:
list index out of range
- 如:以上两种信息那我们可这样进行处理.将不同的错误信息写入到不通的文件中. 如下代码:
try:
int("Harry")
li = [11,22,33,44,55]
li[10]
except IndexError as e:
print("Write IndexError.log In The File")
except ValueError as e:
print("Write ValueError.log In The File")
- 这样写还存在问题. 如果出现其他错误呢? 那么还是会报错.此时就需要用下面的方法.如下代码:
try:
int("Harry")
li = [11,22,33,44,55]
li[10]
except IndexError as e:
print("Write IndexError.log In The File")
except ValueError as e:
print("Write ValueError.log In The File")
except Exception as e:
print("Write Exception.log In the Fiel")
当执行到(int("Harry"))时首先会校验.IndexError.不行接着往下执行ValueError 扑捉到了. 就会跳出.接着执行其他的.
执行li[10]时.会执行IndexError.扑捉到了.就会跳出执行其他代码.
如果程序中还有其他错误.不属于IndexError和ValueError时.则会执行下边Exception .写入文件中.
这也是最常写的异常处理模式.
最常写的异常处理模式
try:
int("Harry")
li = [11,22,33,44,55]
li[10]
except IndexError as e:
print("Write IndexError.log In The File")
except ValueError as e:
print("Write ValueError.log In The File")
except Exception as e:
print("Write Exception.log In the Fiel")
else:
pass
finally:
pass
1 ArithmeticError 2 AssertionError 3 AttributeError 4 BaseException 5 BufferError 6 BytesWarning 7 DeprecationWarning 8 EnvironmentError 9 EOFError 10 Exception 11 FloatingPointError 12 FutureWarning 13 GeneratorExit 14 ImportError 15 ImportWarning 16 IndentationError 17 IndexError 18 IOError 19 KeyboardInterrupt 20 KeyError 21 LookupError 22 MemoryError 23 NameError 24 NotImplementedError 25 OSError 26 OverflowError 27 PendingDeprecationWarning 28 ReferenceError 29 RuntimeError 30 RuntimeWarning 31 StandardError 32 StopIteration 33 SyntaxError 34 SyntaxWarning 35 SystemError 36 SystemExit 37 TabError 38 TypeError 39 UnboundLocalError 40 UnicodeDecodeError 41 UnicodeEncodeError 42 UnicodeError 43 UnicodeTranslateError 44 UnicodeWarning 45 UserWarning 46 ValueError 47 Warning 48 ZeroDivisionError
@所有的异常处理模块都是继承Exception.
- 主动触发异常
try:
raise Exception(".....Harry.....")
except IndexError as e:
print("Write IndexError.log In The File")
except ValueError as e:
print("Write ValueError.log In The File")
except Exception as e:
print("Write Exception.log In the Fiel....%s"%e)
else:
pass
finally:
print("finally")
输出:
Write Exception.log In the Fiel.........Harry.....
finally
此处代码的意思是主动触发异常.raise Exception(".....Harry.....")意思是将我写入的错误信息封装到里面. 当扑捉到时.原样给我输出.可看结果
主动触发异常就是写上raise Exception("....内容....")
- 断言
满足要求才能正常执行,不满足直接抛出异常.assert相当于是致命错误,遇到这个报错,说明程序已经崩溃了
print(1)
assert 1 == 1
print(2)
assert 1 == 2
print(3)
执行结果:
Traceback (most recent call last):
File "E:/Python_Engineering_Review/Day_08/06_异常处理.py", line 23, in <module>
1
2
assert 1 == 2
AssertionError
- 自定义异常
当自带的异常处理种类(Exception\其他)满足不了时. 这时就需要我们自己定义对异常的处理. 如下:
class GouerError(Exception):
def __init__(self,message):
self.message = message
super(GouerError,self).__init__(message)
try:
name = "Harry"
if name != "Gouer":
# 主动触发异常.
raise GouerError(" ...Welcome home... ")
except IndexError as e:
print(e)
except Exception as e:
print(e)

浙公网安备 33010602011771号