异常处理

异常处理

错误

-语法错误

-逻辑错误

 

异常

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

异常处理:

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,更安全了,不至于由于一些小的疏忽而使程序意外崩溃。

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-06-11 15:59  wode110  阅读(73)  评论(0编辑  收藏  举报