Python基础 - 08异常
一、语法错误和异常
1.1 概念
def func():
number += 1
func() # UnboundLocalError: local variable 'number' referenced before assignment
异常: 程序运行时报出的错误。 xxxError。
def chu(a, b):
return a / b
# chu(1,0) # ZeroDivisionError: division by zero
1.2 异常处理
try:可能出现异常的代码except:出现异常后执行的代码finally:pass
异常处理结构1:
def func():
try:
n1 = int(input('输入第一个数字:'))
n2 = int(input('输入第二个数字:'))
sum = n1 + n2
print('和是:', sum)
except:
print('输入数字错误')
func()
'''
输入第一个数字:c
输入数字错误
'''
异常处理结构2: 多个Except, Exception 要放在最后; except Exception as err , err 的内容是错误信息
# 如果有多个except,异常类型的顺序需要注意,Exception放在最后
def func1():
try:
n1 = int(input('输入第一个数字:'))
n2 = int(input('输入第二个数字:'))
oper = input('输入运算符(+ - * /):')
result = 0
if oper == '+':
result = n1 + n2
elif oper == '-':
result = n1 + n2
elif oper == '/':
result = n1 / n2
elif oper == '*':
result = n1 * n2
else:
print('符号输入错误!')
print('结果是:',result)
with open(r'e://app//081.txt','r') as stream:
lines = stream.readlines()
print(lines)
except ZeroDivisionError:
print('除数不能为零')
except ValueError:
print('必须输入数字')
except Exception as err:
print('出错啦', err)
func1()
"""
输入第一个数字:5
输入第二个数字:0
输入运算符(+ - * /):/
除数不能为零
----------------------------
输入第一个数字:c
必须输入数字
----------------------------
输入第一个数字:1
输入第二个数字:2
输入运算符(+ - * /):+
结果是: 3
出错啦 [Errno 2] No such file or directory: 'e://app//081.txt'
"""
异常处理结构3: 在try ... except ... else ... 结构中, 使用else 则 try代码块中不能出现return
def func2():
try:
n1 = int(input('输入数字:'))
print(n1)
except ValueError:
print('输入的不是数字')
else: # 没有异常才会执行的代码块
print('输入完毕')
func2()
'''
输入数字:6
6
输入完毕
---
输入数字:n
输入的不是数字
'''
异常处理结构4: try ... except ... finally ... 结构, 无论是否异常,finally代码块都会执行
场景:文件操作 stream = open(...) stream.read() stream.close() 数据库操作 close()
def func4():
stream = None
try:
stream = open(r'e://app/081.txt','r')
lines = stream.readlines()
print(lines)
except Exception as err:
print(err)
finally:
print('******')
if stream:
stream.close()
func4()
'''
['本次的运算结果为0']
******
----------------------
[Errno 2] No such file or directory: 'e://app/081.txt'
******
'''
带返回值的结构
def func5():
stream = None
try:
stream = open(r'e://app/08.txt','r')
lines = stream.readlines()
print(lines)
return 1
except Exception as err:
print(err)
return 2
finally:
print('******')
if stream:
stream.close()
return 3
x = func5()
print(x) # 无论是否报错,都是 3
二、抛出异常
raise
def register():
username = input('请输入用户名:')
if len(username) < 6:
raise Exception('用户长度必须大于6位!')
else:
print('输入的用户名为:', username)
register()
'''
请输入用户名:admin
Traceback (most recent call last):
File "E:\PythonLearn\pythonBase\02door2\08-except-01.py", line 180, in <module>
register()
File "E:\PythonLearn\pythonBase\02door2\08-except-01.py", line 176, in register
raise Exception('用户长度必须大于6位!')
Exception: 用户长度必须大于6位!
'''
try:
register()
except Exception as err:
print(err)
else:
print('注册成功!')
'''
请输入用户名:admin
用户长度必须大于6位!
'''
Exception继承结构

浙公网安备 33010602011771号