异常处理
异常处理
错误
-语法错误
-逻辑错误
异常
异常就是程序运行错误时发出的信号
异常处理:
1,if 可以进行异常处理,但是有一下缺点:
-重读代码
-可读性差
2,try except 处理异常
try:
被检测的代码块
except 异常类型:
try中一旦检测到异常,执行到这个位置的逻辑
try:
age = input('1==>:')
int(age)
num2 = input('2===>:')
int(num2)
except ValueError as e:
print(e)
print('1')
运行后:
1==>:1 #输入1,符合逻辑会继续执行下边代码
2===>:sw #不符合逻辑,会直接跳到异常处理except 处进行,执行完毕会跳出异常处理继续执行下边代码
invalid literal for int() with base 10: 'sw'
1
-异常类只能用来处理指定的异常情况,如果非指定异常则无法处理.未捕捉到异常,程序直接报错
-多分枝:碰到指定异常直接处理,处理完毕直接跳出异常执行下边代码
try:
age = input('1==>:')
int(age)
num2 = input('2===>:')
int(num2)
l = []
l[10000]
except ValueError as e:
print(e)
except IndexError as e:
print(e)
print('11111')
1==>:1
2===>:2
list index out of range
11111
-万能异常 Exception,碰到有异常就直接处理
try:
age = input('1==>:')
int(age)
num2 = input('2===>:')
int(num2)
l = []
l[10000]
except Exception as e:
print(e)
print('11111')
1==>:we #异常
invalid literal for int() with base 10: 'we'#处理异常
11111
**********************
-else 异常处理中的else代表代码无异常会输出else的代码
try:
age = input('1==>:')
int(age)
except ValueError as e:
print(e)
except Exception as e:
print(e)
else:#代码无异常会输出else
print('代码无异常')
print('11111')
1==>:1
代码无异常
11111
*****************
-finally 在处理异常中,无论代码是否有异常都会执行finally模块代码,通常是用于清理工作。如下:
try:
age = input('1==>:')
int(age)
except Exception as e:
print(e)
else:
print('代码无异常')
finally:
print('无论是否有异常,都会执行此模块,通常是进行清理工作')
print('11111')
/usr/local/bin/python3.7 /Users/chen/PycharmProjects/untitled1/day23/test.py
1==>:de
invalid literal for int() with base 10: 'de'
无论是否有异常,都会执行此模块,通常是进行清理工作
11111
*************************
1==>:1
代码无异常
无论是否有异常,都会执行此模块,通常是进行清理工作
11111
自定义异常
自定义异常:代码如下:
class 异常名(异常基类): #此处的异常基类:比如 BaseException,Exception, LookupError等等。
def __init__(self,msg):
self.msg =msg
例如:输入的字符串,不会报错,不是字符串格式,会报错,代码如下:
class Egonexception(BaseException):
def __init__(self,msg):
self.msg = msg
def __str__(self):
return self.msg
try:
raise Egonexception('23')
except Egonexception as e:
print(e)#=====》结果是23 因为输入的'23'是字符串格式.
断言
assert 条件
assert 报错,下边的代码不执行。
s=4
print('====>')
assert s==4 #此代码相当于以下2行if代码:
#if s !=4:
#raise AssertionError
print('====>')
结果是:
====>
====>
******************
若s =5
s=5
print('====>')
assert s==4
print('====>')
结果是:
====>
AssertionError #报错程序无法继续往下运行
使用try...except 的方式优点:
1,把错误处理和真正的工作分开来
2,代码更容易组织,更清晰,复杂的工作任务更容易实现
3,更安全了,不至于由于一些小的疏忽而使程序意外崩溃。