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)