异常
捕获异常
如果对代码执行的结果不确定,可以使用try
来捕获异常
try:
尝试执行的代码
except:
出现错误的处理
try:
num = int(input("请输入数字:"))
except:
print("请输入正确的数字")
在执行完except里的内容后,会继续执行下面的内容。上一段代码会报错:pep8:do not use bare except 我也不知道该怎么解决
我们可以根据错误类型提示来编写代码不同情况下的异常,但是因为不可能预判所有错误类型,所以需要使用Exception这个特殊的类。
Exception
是python为异常提供的一个关键的类。
except Exception as 常量:
print("未知错误%s" % 常量)
try:
num = int(input("请输入数字:"))
result = 8/num
print(result)
except ZeroDivisionError:
print("除零错误")
# except ValueError:
# print("请出入正确的整数")
except Exception as unknow_error:
print("未知错误%s" % unknow_error)
else:
print("尝试成功")
finally:
print("无论是否成功都会执行")
print("这里也会被执行")
异常捕获的完整语法
try:
尝试执行的代码
except 错误类型1:
对应的代码处理
except 错误类型2:
对应的代码处理
except (错误类型3, 错误类型4):
对应的代码处理
except Excepttion as result:
print(result)
else:
没有异常才会执行的代码
finally:
无论是否异常,都会执行的代码
异常具有传递性
当函数或者方法执行时出现异常,会将异常传递给函数或方法的调用一方,如果传递到主程序,仍然没有异常处理,程序才会被终止。因此只需要在主程序中增加异常捕获,保证代码的整洁。
def demo1():
return int(input("请输入一个整数")
def demo2():
return demo1()
try:
print(demo2())
except ValueError:
print("请输入正确的整数:")
except Exception as result:
print("未知错误%s" % result)
抛出raise异常
可以根据需求主动抛出异常。比如提示用户输入密码,如果长度少于8,抛出异常。
如果希望抛出异常:
1、创建一个Exception
的对象
2、使用raise
关键字抛出异常对象
需求:
定义函数,提示用户输入密码
如果用户输入长度<8,抛出异常
如果用户输入长度>=8,,返回输入密码
def input_password():
password = input("请输入密码:")
if len(password) >= 8:
return password
# 主动抛出异常
# 1>创建异常对象
error = Exception("密码长度不够")
# 2>主动抛出异常
raise error
try:
print(input_password())
except Exception as result:
print(result)
执行结果:
请输入密码:a
密码长度不够
input_password()
是一个函数,可以使用print
直接打印,异常会传递到主程序,我们可以将"密码长度不够"
字符串作为参数,使用raise
抛出,在主程序中可以捕获。