Python基础--异常

异常

当Python程序执行时遭遇到错误,解释器将无法继续往下执行,此时会出现错误提示,这便是异常。

  • 例如打开一个不存在的文件 

       

  • 使用一个没有定义的变量

       

捕获异常

  • try-except

  将可能出现问题的代码,放在try中,把处理异常的代码放在except中。

try:
    open("www.txt",'r')
except FileNotFoundError:
    print("--------处理异常-------")
    print("您打开的文件不存在")

输出:
    --------处理异常-------
    您打开的文件不存在

  当我们需要捕获多个异常时,可以将要捕获异常的名字放在一个元组中。except之后使用Exception将捕获所有异常,有时我们希望存储捕获的异常可以使用as。

try:
    open("www.txt",'r')
    print(num)
except (FileNotFoundError,NameError) as exceptionInfo:
    print("--------处理异常-------")
    print("您打开的文件不存在")
    print("异常的基本信息:",exceptionInfo)

输出:
    --------处理异常-------
    您打开的文件不存在
    异常的基本信息: [Errno 2] No such file or directory: 'www.txt'
  • else

  在if中条件不满足时就会执行,for循环中不满足条件时就会执行。类似在try-except中如果没有异常将被执行else中的逻辑代码。

try:
    open("test.py",'r')
    num = 100
    print(num)
except (FileNotFoundError,NameError) as exceptionInfo:
    print("--------处理异常-------")
    print("您打开的文件不存在")
    print("异常的基本信息:",exceptionInfo)
else:
    print("没有异常产生,可以完美使用")

输出:
    100
    没有异常产生,可以完美使用
  •  try-finally

  如果使用try-finally捕获异常,那么无论异常是否产生都要执行finally部分语句。finally通常用来文件关闭,释放锁,数据库连接返还给连接池等。

def division(a,b):
    try:
        result = a/b
        print("return----before")
        return result
    except Exception as errorInfo:
        print("捕获异常信息:",errorInfo)
    else:
        print("没有异常,result=",result)
    finally:
        print("finally---让我来做最后的事情吧")

division(100,20)
print("--"*20)
division(100,0)

输出:
return----before
finally---让我来做最后的事情吧
----------------------------------------
捕获异常信息: division by zero
finally---让我来做最后的事情吧

  当程序产生异常时,先执行打印异常信息,然后执行finally语句。如果程序没有异常finally会在return之后立即执行。如果注释掉return result语句,在没有错误的情况下,else执行之后,才执行finally语句。

return----before
没有异常,result= 5.0
finally---让我来做最后的事情吧
----------------------------------------
捕获异常信息: division by zero
finally---让我来做最后的事情吧

自定义异常

首先创建一个子类去继承Error或者Exception,然后使用raise引发一个异常。

class ShortInputException(Exception):

    def __init__(self,length,atleast):
        super().__init__()
        self.length = length
        self.atleast = atleast
def test():
    try:
        s = input("请输入:")
        if len(s) < 3:
            raise ShortInputException(len(s),3)
    except ShortInputException as info:
        print("ShortInputException: 输入的长度是 %d,长度至少应是 %d"% (info.length, info.atleast))
    else:
        print("--else--没有异常--")
test()

输出:
请输入:abc
--else--没有异常--
请输入:as
ShortInputException: 输入的长度是 2,长度至少应是 3

 

posted @ 2018-11-30 09:14  今生遇见前世  阅读(143)  评论(0编辑  收藏  举报