Python异常的恐怖传说
对于初入门无助的初学者来说,最怕的不是恐怖片。
而是最怕Python程序抛出一串恐怖的字符串,然后整体程序就终止了。
然后就很无解了,怎么才能解决这个问题。异常这个鬼,不仅让初学者恐怖,经常使用的中鸟,老鸟也是很痛苦。
一个快运行出结果的程序,由于异常而中途退出,这个心情又有多滴血?
引出这里要介绍的预防Python“出轨”的办法。请看下面。
Python异常语法
是不是经常在Python运行时,出现错误导致异常退出而烦恼?
是不是不知道错误出现在哪里而烦恼?
解决办法来了,让Python的异常语法来帮忙。
Python版本不同的异常机制
Python2和Python3的Exception差异:
在Python 2.x用法实例:
1 try:2 ......3 except Exception,e:4 raise e
在Python 3.x的用法实例:
1 try:2 ......3 except Exception as e:4 raise e
可以看到,Python 3中是as e.
异常语法概要
尝试捕获异常(接收异常通知),将程序转为正常状态并继续执行。
语法说明:
as 子句是用于绑定错误对象的变量,可以省略
except 子句可以有一个或多个,但至少要有一个
else 子句最多只能有一个,也可以省略
finally 子句最多只能有一个,也可以省略
实际场景中的异常模式
异常的常见模式:
#-------------模块一:except 错误类型,捕获异常类型---------------------------# except ValueError: # 只有在有异常时才会执行# print('在try的内部语句中发生了值错误,已处理并转为正常状态')# except ZeroDivisionError:# print('输入人数为0,分苹果失败')#-------------------------------------------------------------------------#---模块二:except(错误类型1,错误类型2):满足这两个错误类型都执行这个函数------# except (ValueError, ZeroDivisionError):# print('苹果不分了')#--------------------------------------------------------------------------#--模块三:except:除了捕获的之外,不管什么异常都执行此函数----------------------# except ValueError: # 只有在有异常时才会执行# print('在try的内部语句中发生了值错误,已处理并转为正常状态')# except:# print('收到除ValueError之外的错误通知')#---------------------------------------------------------------------------#--模块四:as 变量: 将捕获的错误信息用变量绑定----------------------------------# as 的用法# except ValueError as err:# print('错误的值是:', err) # invalid literal for int() with base 10: 'aaa' # 10个苹果您想分给几个人? # 请输入人数: aaa # 错误的值是: invalid literal for int() with base 10: 'aaa' # 程序正常退出#---------------------------------------------------------------------------#--模块五:else的用法,只有在try是没有异常的时候才会执行--------------------------# except ValueError:# print('苹果不分了')# else: # 只有在try没有发生错误时才会执行# print('在当前try语句内部,没有发生任何异常,程序正常执行')#----------------------------------------------------------------------------#--模块六:finally的用法,不管try有没有错误,其下的语句块都会执行------------------# finally字句的用法except ValueError: print('苹果不分了')except: # 除ValueError异常外的异常 print('错误值是:0' )else: # 如果没有异常才执行 print('else子句被执行了')finally: # 不管有没有异常都会执行的语句 print('finally子句被执行了')print('程序正常退出')