如果Python解释器遇到一个错误,就会终止程序的执行,并且提示一些错误的信息,这就是异常。
try: 尝试执行的代码;
except: 出现错误时的处理;
else: 没有出现错误时的处理;
finally: 无论是否发生错误,都执行finally下面的代码;
######
例子一:
######不使用try语句时:
#coding=utf-8
def func1():
num = 16 / 8
return num
def func2():
num = 16 / 0
return num
def func3():
num = 16 / 4
return num
if __name__ == '__main__':
Result_1 = func1()
print(Result_1)
Result_2 = func2()
print(Result_2)
Result_3 = func3()
print(Result_3)
脚本运行的结果:(脚本运行到func2()发生错误就终止了)
C:\Users\jacky\Desktop>python xx.py
2.0
Traceback (most recent call last):
File "xx.py", line 20, in <module>
Result_2 = func2()
File "xx.py", line 8, in func2
num = 16 / 0
ZeroDivisionError: division by zero
C:\Users\jacky\Desktop>
######使用try语句时:
#coding=utf-8
def func1():
num = 16 / 8
return num
def func2():
try:
num = 16 / 0
return num
except:
pass
def func3():
num = 16 / 4
return num
if __name__ == '__main__':
Result_1 = func1()
print(Result_1)
Result_2 = func2()
print(Result_2)
Result_3 = func3()
print(Result_3)
脚本运行的结果:(通过捕获异常,遇到错误时,脚本不会终止)
C:\Users\jacky\Desktop>python xx.py
2.0
None
4.0
######
例子二:
#coding=utf-8
x = int(input("请输入一个被除数:"))
y = int(input("请再输入一个除数:"))
def func1(x,y):
try:
Result_1 = x / y
return Result_1
except Exception as e: #显示异常对象真正的异常信息
print(e)
if __name__ == '__main__':
Result_2 = func1(x,y)
print(Result_2)
多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个被除数:6
请再输入一个除数:3
2.0
C:\Users\jacky\Desktop>python xx.py
请输入一个被除数:6
请再输入一个除数:0
division by zero
None
C:\Users\jacky\Desktop>
######
例子三:
#coding=utf-8
x = int(input("请输入一个被除数:"))
y = int(input("请再输入一个除数:"))
def func1(x,y):
try:
Result_1 = x / y
return Result_1
except Exception as e:
print(e)
if __name__ == '__main__':
Result_2 = func1(x,y)
if Result_2 != None: #返回结果不为None时,才显示
print(Result_2)
多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个被除数:6
请再输入一个除数:3
2.0
C:\Users\jacky\Desktop>python xx.py
请输入一个被除数:6
请再输入一个除数:0
division by zero
C:\Users\jacky\Desktop>
######
例子四:
#coding=utf-8
def func1():
try:
y = int(input("请输入一个除数:"))
Result_1 = 8 / y
print(Result_1)
except ZeroDivisionError:
print("除数不得为0")
except ValueError:
print("除数不是合法整数")
else:
print(f"除数{y}是合法整数")
if __name__ == '__main__':
func1()
多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:0
除数不得为0
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:8.5
除数不是合法整数
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:a
除数不是合法整数
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:4
2.0
除数4是合法整数
C:\Users\jacky\Desktop>
######
例子五:
#coding=utf-8
def func1():
try:
y = int(input("请输入一个除数:"))
Result_1 = 8 / y
print(Result_1)
except: #遇到错误就忽略所有异常类,只输出自己定义的异常信息
print("除数有问题")
else:
print(f"除数{y}是合法整数")
if __name__ == '__main__':
func1()
多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:0
除数有问题
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:8.5
除数有问题
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:a
除数有问题
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:4
2.0
除数4是合法整数
C:\Users\jacky\Desktop>
######
例子六:
#coding=utf-8
def func1():
try:
y = int(input("请输入一个除数:"))
Result_1 = 8 / y
print(Result_1)
except:
print(0)
else:
print(f"除数{y}是合法整数")
finally:
print("Welcome to zhuohua.")
if __name__ == '__main__':
func1()
多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:0
0
Welcome to zhuohua.
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:8.5
0
Welcome to zhuohua.
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:a
0
Welcome to zhuohua.
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:4
2.0
除数4是合法整数
Welcome to zhuohua.
C:\Users\jacky\Desktop>
######
例子七:
#coding=utf-8
def func1():
try:
Path_1 = "D:\\1.txt"
f_name = open(Path_1)
f_name.close()
except:
print("文件D:\\1.txt不存在")
else:
print("文件D:\\1.txt打开成功")
func2()
def func2():
try:
Path_1 = "D:\\2.txt"
f_name = open(Path_1)
f_name.close()
except:
print("文件D:\\2.txt不存在")
else:
print("文件D:\\2.txt打开成功")
if __name__ == '__main__':
func1()
多次运行脚本的结果:
文件D:\1.txt、D:\2.txt都不存在时的结果:( 不会执行func2() )
C:\Users\jacky\Desktop>python xx.py
文件D:\1.txt不存在
C:\Users\jacky\Desktop>
文件D:\1.txt不存在,但文件D:\2.txt存在时的结果:( 不会执行func2() )
C:\Users\jacky\Desktop>python xx.py
文件D:\1.txt不存在
C:\Users\jacky\Desktop>
文件D:\1.txt存在,但文件D:\2.txt不存在时的结果:( 会执行func2() )
C:\Users\jacky\Desktop>python xx.py
文件D:\1.txt打开成功
文件D:\2.txt不存在
C:\Users\jacky\Desktop>
文件D:\1.txt、D:\2.txt都存在时的结果:( 会执行func2() )
C:\Users\jacky\Desktop>python xx.py
文件D:\1.txt打开成功
文件D:\2.txt打开成功
C:\Users\jacky\Desktop>
######
例子八:(使用 raise 引发异常)
#coding=utf-8
def func1():
if Key_1 == 'a':
Result_1 = 8
else:
Result_1 = 8.8
return Result_1
def func2():
Result_2 = func1()
if type(Result_2) != int: #如果变量Result_2的数据类型不是整数,就引发异常
raise #默认引发的是RuntimeError异常
else:
print(Result_2)
if __name__ == '__main__':
Key_1 = input("请输入一个字母:")
func1()
func2()
print("Welcome to zhuohua.") #异常引发后的代码不会执行
多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个字母:a
8
Welcome to zhuohua.
C:\Users\jacky\Desktop>python xx.py
请输入一个字母:b
Traceback (most recent call last):
File "xx.py", line 26, in <module>
func2()
File "xx.py", line 17, in func2
raise
RuntimeError: No active exception to reraise
C:\Users\jacky\Desktop>
######
例子九:(使用 raise 引发异常)
#coding=utf-8
def func1():
if Key_1 == 'a':
Result_1 = 8
else:
Result_1 = 8.8
return Result_1
def func2():
Result_2 = func1()
if type(Result_2) != int: #如果变量Result_2的数据类型不是整数,就引发TypeError异常
print("结果的数据类型不是整数!")
raise TypeError
else:
print(Result_2)
if __name__ == '__main__':
Key_1 = input("请输入一个字母:")
func1()
func2()
print("Welcome to zhuohua.") #异常引发后的代码不会执行
多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个字母:a
8
Welcome to zhuohua.
C:\Users\jacky\Desktop>python xx.py
请输入一个字母:b
结果的数据类型不是整数!
Traceback (most recent call last):
File "xx.py", line 27, in <module>
func2()
File "xx.py", line 18, in func2
raise TypeError
TypeError
C:\Users\jacky\Desktop>
######
例子十:( try + raise )
#coding=utf-8
def func1():
if Key_1 == 'a':
Result_1 = 8
else:
Result_1 = 8.8
return Result_1
def func2():
Result_2 = func1()
try:
if type(Result_2) != float: #如果变量Result_2的数据类型不是浮点数,就引发TypeError异常
raise TypeError("结果的数据类型不是浮点数!")
else:
print(Result_2)
except TypeError as e:
print("引发异常:",repr(e))
if __name__ == '__main__':
Key_1 = input("请输入一个字母:")
func1()
func2()
print("Welcome to zhuohua.") #使用了try语句,异常引发后的代码会继续执行
多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个字母:b
8.8
Welcome to zhuohua.
C:\Users\jacky\Desktop>python xx.py
请输入一个字母:a
引发异常: TypeError('结果的数据类型不是浮点数!',)
Welcome to zhuohua.
C:\Users\jacky\Desktop>
######
例子十一:( try + raise )
#coding=utf-8
def func1():
if Key_1 == 'a':
Result_1 = 8
else:
Result_1 = 8.8
return Result_1
def func2():
Result_2 = func1()
try:
if Result_2 != 8: #如果变量Result_2的值不等于8,就引发ValueError异常
raise ValueError("结果不等于8")
else:
print(Result_2)
except ValueError as e:
print("引发异常:",repr(e)) #有两种显示方式,可任选一种
print("引发异常:",e)
if __name__ == '__main__':
Key_1 = input("请输入一个字母:")
func1()
func2()
print("Welcome to zhuohua.")
多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个字母:a
8
Welcome to zhuohua.
C:\Users\jacky\Desktop>python xx.py
请输入一个字母:b
引发异常: ValueError('结果不等于8',)
引发异常: 结果不等于8
Welcome to zhuohua.
C:\Users\jacky\Desktop>
######
例子十二:( try + raise )
#coding=utf-8
def func1():
try:
if len(Key_1) < 5:
raise RuntimeError("密码长度不够5位数")
else:
print("密码长度达到要求")
except RuntimeError as e:
print(repr(e))
if __name__ == '__main__':
Key_1 = input("请输入密码:")
func1()
多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入密码:123
RuntimeError('密码长度不够5位数',)
C:\Users\jacky\Desktop>python xx.py
请输入密码:12345
密码长度达到要求
C:\Users\jacky\Desktop>python xx.py
请输入密码:12345a
密码长度达到要求
C:\Users\jacky\Desktop>
######
例子十三:( try + raise )
#coding=utf-8
def func1():
try:
func2()
except RuntimeError as e:
print(e)
#print(repr(e))
def func2():
if len(Key_1) >= 5:
print("密码长度达到要求")
else:
e = RuntimeError("密码长度不够5位数")
raise e
if __name__ == '__main__':
Key_1 = input("请输入密码:")
func1()
多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入密码:123
密码长度不够5位数
C:\Users\jacky\Desktop>python xx.py
请输入密码:12345
密码长度达到要求
C:\Users\jacky\Desktop>python xx.py
请输入密码:12345a
密码长度达到要求
C:\Users\jacky\Desktop>
相关文章:
retry装饰器
自定义函数
自定义类
if语句
Python3脚本管理Linux下的MySQL
Python3检测文件内容中是否包含关键字
Python3根据文件名搜索文件
CentOS6使用Socket(检测TCP端口)
Windows使用tcping+任务计划 |