怎样能让程序发生异常时,不让程序停止,能正常运行呢?如下效果,就需要捕获异常。
while True:
try:
ret=eval(input("输入公式"))
print(ret)
except ZeroDivisionError as e:
print("除数为0了")
try:
print("开始")
print(1/0)
print("结尾")
except ZeroDivisionError as e:
print("try中代码出错你就看到我了")
异常类型和捕获的异常类型不相同,是不能捕获异常的
try:
print("开始")
print(1/0)
print("结束")
except IndexError as e:
print("你不会看到这句话,因为异常类型和捕获的异常类型不相同,不能捕获异常")
多分支结构
try:
print("开始")
lst=[12,3]
print(lst[3])
print(2/0)
print("结束")
except ZeroDivisionError:
print("除数为0")
except IndexError:
print("索引越界")
"""
结果为:
开始
索引越界 #能捕捉多种异常类型,但是只报第一次出现的异常,再往下就不会再执行了
"""
元组结构
try:
a=[1]
print(2/0)
print(a[2])
except (ZeroDivisionError,IndexError) as e:
print(e) #division by zero
else格式:没有出现异常的话执行else
try:
print("哈哈")
print(1/0)
except:
print("出现异常了")
else:
print("没有出现异常")
try...finally格式,不管try中是否抛出异常,最终都会执行finally中的代码。
try:
a=[1,2]
print(1/0)
print(a[3])
except:
print("出错执行这里")
finally:
print("有没有错误都会执行这里")
抛出系统异常
while True:
try:
name=input("请输入姓名(不能少于三位):")
if len(name)<3:
raise Exception("姓名太少,请重新输入")
else:
pwd=input("请输入密码:")
print(name,pwd)
except Exception as e:
print(e)
抛出自定义异常
class ShortInputError(Exception):
def __init__(self,msg):
self.msg=msg
def __str__(self):
return self.msg
try:
raise ShortInputError("异常消息")
except ShortInputError as e:
print(e)
练习:判断输入字符串的长度,如果小于指定的长度就报错
class MyException(Exception):
def __init__(self,length,atlength):
self.length=length
self.atlength=atlength
def __str__(self):
return "输入的长度是{},长度至少为{}".format(len(self.length),self.atlength)
msg=input("请输入的长度大于5:")
try:
if len(msg)<5:
raise MyException(msg,5)
except MyException as e:
print(e)