一、什么是异常和异常处理
- 异常就是错误。
- 异常会导致程序崩溃并停止运行。
- 能监控并捕获到异常,将异常部位的程序进行修理,使得程序继续正常运行。
异常的语法
try:
<代码块1>被try关键字检查并保护的业务代码
except: <异常的类型>:
<代码块2> #代码块1出现错误后执行的代码块
# coding:utf-8
def upper(str_data):
new_str = ''
try:
new_str = str_data.upper()
except:
print('程序出错了')
return new_str
result = upper(1)
print("result: ", result)
- 我们使用upper函数,它可以将字母变为大写,但是我们故意传入数字,数字是没有upper函数的,所以程序会报错,然后等它报错的时候我们用except接收并抛出它。
- 可以看到最后一条打印语句仅仅打印出的是一个空字符串,他不会打印出我们定义的result变量。
二、捕获通用异常
无法确定是哪种异常的情况下使用的捕获方法
try:
<代码块>
except Exception as e:
<异常代码块>
def upper(str_data):
new_str = ''
try:
new_str = str_data.upper()
except Exception as e:
print('程序出错了:{}'.format(e))
return new_str
result = upper(1)
print("result: ", result)
运行结果:
三、捕获具体异常
- 确定是哪种异常的情况下使用的捕获方法
- except <具体的异常类型> as e
try:
1/0
except ZeroDivisionError as e:
print(e)
- ZeroDivisionError是python内置的具体异常:0不能被整除。
def test():
try:
print('111')
1/0
print('hello')
except ZeroDivisionError as e:
print(e)
test()
运行结果:
四、捕获多种异常
捕获多种异常的写法1
try:
print('try start')
res = 1/0
print('try finish')
except ZeroDivision Error as e:
print(e)
except Exception as e: # 可以有多个except
print('This is a pubic except, bug is: %s' %e)
- except代码块有多个的时候,当捕获到第一个后,不会继续往下捕获。
捕获异常的写法2
try:
print('try start')
res = 1/0
print('try finish')
except(ZeroDivisionError, Exception) as e:
print(e)
- except代码后边的异常类型使用元组包裹起来,捕获到哪种抛出哪种。
def test1():
try:
print('hello')
print(name)
except (ZeroDivisionError, Exception) as e:
print(e)
print(type(e))
print(dir(e))
test1()
运行结果: