赞
踩
print(3/0) #报错,程序停止执行
需求:当程序遇到问题时不让程序结束,而越过错误继续向下执行
try……except……else
格式:
try:
语句t
except 错误码 as e: #对于能够补救的错误,用except捕捉,如果不能补救,则不捕捉
语句1
except 错误码 as e:
语句2
……
except 错误码 as e:
语句n
else:
语句e
注意:else语句可有可无
作用:用来检测try语句块中的错误,从而让except处的语句捕获错误信息并处理
逻辑:当程序执行到try-except-else语句时
如果try“语句t”执行出现错误,会匹配第一个错误码,如果匹配上就执行对应“语句”
如果try“语句t”执行出现错误,但是没有匹配的异常,错误会被提交到上一层的try语句。或者到程序的最上层(try语句的嵌套)
如果try“语句t”执行没有出现错误,执行else下的“语句e”(前提,有else语句),个人理解,else与Except并列,如果出现了异常,执行Except中的语句,否则执行else中的语句
try:
print(3/0)
except ZeroDivisionError as e: #执行了该处错误
print("除数为0了")
except NameError as e:
print("没有该变量")
else:
print("代码没有问题")
print("*"*8)
ps:错误码不用记
ps:一般代码出现错误了,直接使用except而不使用任何的错误类型
try:
print(4/0)
except: #不管出现了什么错误,都会执行此处代码
print("程序出现异常了")
使用except带着多种异常
try:
pass
except (NameError, ZeroDivisionError): #要捕获多个异常时,使用元组。
print("出现了NameError或ZeroDivisionError")
ps:以上3种为常用的模式
try:
print(5/0)
except BaseException as e: #因为BaseException是所有错误类的基类,所以此处会捕获所有的异常,从而下面的捕获异常的语句不会执行。也可以直接使用Exception
print("异常1")
except ZeroDivisionError as e:
print("异常2")
def func(num):
print(1/num)
def func2(num):
func1(num)
def main():
func2(0)
try:
main()
except ZeroDivisionError as e:
print(e) #此处可以打印出错误信息
格式:
try:
语句t
except 错误码 as e:
语句1
except 错误码 as e:
语句2
……
except 错误码 as e:
语句n
finally:
语句f
作用:语句t无论是否有错误,都将执行最后的语句f(常用于关闭文件)
try:
print(1/0)
except ZeroDivisionError as e:
print("出错了")
else:
print("程序无异常")
finally: #如果try里面有错误,执行finally后程序停止执行,否则执行后不停止程序
print("必须执行我")
class ShortInputException(BaseException): """ 自定义的异常类 """ def __init__(self, len, atleast_len): #自定义异常时重写了init方法,也可以不重写,那样可以直接给自定义异常传字符串参数,然后print该自定义异常时,会打印出参数字符串 self.length = len self.atleast_len = atleast_len def main(): try: str = input("请输入您想要输入的信息:") if len(str) < 5: raise ShortInputException(len(str),5) except ShortInputException as sip: print("您输入的长度过短:%d,最短要求:%d"%(sip.length, sip.atleast_len)) else: print("输入正确") main()
异常发生后,会传递给函数(方法)的调用者A,如果A有捕捉到该异常(try……except……),则会按捕捉机制处理。如果A没有捕捉该异常,则会层层向上传递,最后会传递到python解析器。此处就简单地终止程序。
def fun1():
print(1 / 0)
def fun2():
try:
fun1()
except ZeroDivisionError as zero:
print(zero)
fun2()
输出结果:
def fun1():
print(2/1)
raise ZeroDivisionError
try:
fun1()
except ZeroDivisionError as zero:
print(zero)
数字:0表示假,非0表示真
[]、{}、()、""、False、None:空的列表、字典、字符串、False、空类型都为假
其他均为真,eg:“a”、3
BaseException: 包含所有built-in exceptions
Exception: 不包含所有的built-in exceptions,只包含built-in, non-system-exiting exceptions,像SystemExit类型的exception就不包含在里面。
个人目前感想:对于异常,就目前水平而言,可以结合文件读写以生成log
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。