Python异常处理
Published on 2018 - 01 - 22
异常捕获
try
尝试运行一段代码,如果遇到错误,则根据返回的错误信息,执行相应的except,如果是程序中没有定义的未知错误,那么会执行 except
中的Exception
类,并把抓去到的异常放入as
后面的变量中,然后再将其打印出来做个输出。
else
是当try中的代码执行成功后,才会执行的代码,如果try遇到了任何错误则不会执行
finally
是无论如何都会执行的代码,在异常处理中的语法中,不是必须的,如论try执行成功与否,都会执行finally
中的所有代码
try:
num = int(input("请输入一个整数"))
calc = 8 / num
except ValueError:
print("请输入一个正确的整数")
except Exception as unkonw_error:
print("未知错误 %s" % unkonw_error)
else:
print("计算结果为 %.2f" % calc)
finally:
print("运行完成")
print("-" * 50)
异常的传递
异常的传递:当函数/方法出现异常,会将异常传递给喊出/方法的调用一方
如果传递到主程序,仍然没有异常处理,程序才会被终止
在开发中,可以在主函数中增加异常捕获
而在主函数中调用的其他函数,只要出现异常,都会传递到主函数中的异常捕获中。
这样就不需要在函数中增加大量的异常捕获,能够保证代码的简洁。
代码示例:
def demo1():
return int(input("请输入一个整数"))
def demo2():
return demo1()
try:
print(demo2())
except Exception as unknow_except:
print("未知错误 %s" % unknow_except)
主动抛出异常
可以使用Exception
类与raise
结合,来主动抛出异常。
如以下方法,input_password只负责提示用户输入,如果长度不正确,需要由其他的函数进行处理,因此可以先抛出异常,再使用其他函数捕获异常
def input_password():
"""
先抛出异常,再使用其他函数捕获异常
:return:
"""
passwd = input("请输入长度大于8的字符串")
if len(passwd) >= 8:
return passwd
ex = Exception("输入的长度不够")
raise ex
try:
print(input_password())
except Exception as error:
print(error)