Board logo

标题: try语句 [打印本页]

作者: admin    时间: 2019-9-23 14:53     标题: try语句

如果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 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 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 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+任务计划




欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/) Powered by Discuz! 7.2