处理异常
try-except语句
该语句用来捕获异常。引发异常后的操作是执行except语句的异常处理代码,而不是直接抛出一段红色的输出。如果try语句没有检测到异常,那么就不会执行except中的内容。
try:
检测范围
except[expression[as identifier]]:
异常处理代码
try:1/0
except:print("除数不能为0")
expression是指定捕获的精确异常,as是将异常的原因提取出来。
try:1/0
except ZeroDivisionError as e:print(e)
预判多个可能出现的错误和异常,可以将多个可能出现的异常用元组的形式包裹起来。
try:1/0520+"py"
except (ZeroDivisionError,ValueError,TypeError):print("出错了")
若需要单独处理某种异常,可以单独使用except语句。
try:1/0520+"py"#该错误被跳过了
except (ZeroDivisionError):print("除数不能为0")
except ValueError:print("值不正确")
except TypeError:print("类型不正确")
try-except-else语句
当try语句没有检测出异常时,就会执行else语句中的内容。
try:1/2
except:print("有错")
else:print("没错")
try-except-finally语句
无论异常是否发生,都必须执行的内容。通常用于收尾工作。
try:1/2
except:print("有错")
else:print("没错")
finally:print("检测完成")
最终:
try:
检测范围
except[expression[as identifier]]:
异常处理代码
except[expression[as identifier]]:
异常处理代码
......
else:
没有出发异常时执行的代码
finally:
收尾工作执行的代码
异常的嵌套
try:try:520+""except:print("内部异常")1/0
except:print("外部异常")
finally:print("检测完成")
更换1/0的位置
try:1/0try:520+""except:print("内部异常")
except:print("外部异常")
finally:print("检测完成")
raise语句
主动引发异常,但不能够使用raise语句生产一个不存在的异常。
raise ValueError("值不正确")
assert语句
只能主动引发AesertionError异常。通常用于代码调试。成立则无事发生,不成立则抛出异常。
s = "PY"
assert s == "PY"
assert s != "PY"
利用异常实现goto
try:while True:while True:for i in range(10):if i>3:raiseprint(i)print("跳过")print("跳过")
except:print("结束")