人工智能之Python14 异常处理

作为一个合格的程序员,在编程的时候一定要意识到一点,就是永远不要相信你的用户,把用户定位成黑客,这样自己写出来的代码才能够更稳定,更健壮。

python提供的异常处理机制,当异常出现的时候即使捕获,并从内部自我消化掉。

常见异常错误

  1. FileNotFoundError 文件未找到异常
  2. AssertionError 断言语句失败
  3. AttributeError 尝试获取位置对象属性
  4. IndexError 索引超出序列的范围
  5. 等等

异常处理

知道了以上出现的集中异常错误不用捉急,可以通过异常捕获来进行处理。

异常捕获可以使用try语句来实现,任何出现在try语句范围内的异常都会被及时捕获到。try语句有两种实现形式:
1. try-except
2. try-finally

def testException():
    file = open("这是一个不存在的文件.txt")
    print(file.read(-1))
    file.close()

testException()
# 会出现 FileNotFoundError: [Errno 2] No such file or directory: '这是一个不存在的文件.txt' 异常

# 异常处理
def doException():
    try:
        file = open("这是一个不存在的文件.txt")
        print(file.read(-1))
        file.close()
    except FileNotFoundError as reason :
        print("发生了FileNotFoundError异常")
doException()

# 输出
# 发生了FileNotFoundError异常

多异常处理:可以定义多个except来处理不同的异常情况

对多个异常统一处理

def doException():
    try:
        file = open("这是一个不存在的文件.txt")
        print(file.read(-1))
        file.close()
    except (FileNotFoundError,TypeError) as reason :
        print("发生了FileNotFoundError或者TypeError异常")
doException()

# 输出
# 发生了FileNotFoundError或者TypeError异常

捕获所有异常

def doException():
    try:
        file = open("这是一个不存在的文件.txt")
        print(file.read(-1))
        file.close()
    except :
        print("发生了异常")
doException()

# 输出
# 发生了异常

通常不建议这么处理异常,因为他会隐藏所有程序员未想到并且为做好处理准备的错误

try-except-finally

为了实现就算发生异常,但也不得不执行的收尾工作,可以使用try-except-finally语法处理。

eg:上述示例稍加修改

def doException():
    try:
        f = open("这是一个不存在的文件.txt")
        print(f.read())
        sum = 1 + '1'
    except:
        print("发生了异常")
    finally:
        f.close()
doException()

raise语句

python也可以自己排除一个异常

raise ZeroDivisionError("除数不能为零")

else语句

在Python中else语句不仅能跟if搭配,还可以循环语句(for、while),也能够跟异常处理进行搭配

  1. if else搭配

    if 条件:
    条件为真执行
    else:
    条件为假执行

  2. for else、while else

    else可以跟for和while循环语句配合使用,但else语句块只在循环完成之后执行,也就是说,如果循环中间使用break语句跳出循环,那么else里边的内容就不会执行了

def doForElse():
    num = int(input("请输入一个数:"))
    count = num // 2
    while count > 1:
        if num % count == 0:
            print("%d 最大的约数是 %d" % (num,count))
            break
        count -= 1
    else:
        print("%d 是素数" % num)
doForElse()

这个小程序要求用户输入的数的最大约数,如果是素数的话就提醒”某某是素数“
要是用地板除法(count = num // 2),否则会出现错误,for语句的用法跟while一样

try-except-else

else还能跟try-except进行搭配,实际跟循环语句搭配差不多:只要try语句块里没有出现异常,就会执行else语句块里的内容

def doTryElse():
    try:
        int('123a')
    except:
        print('出现异常了')
    else:
        print('没有任何异常')
doTryElse()
# 输出是 出现异常了
# 将int('123a') 给成 int('123') 输出是 没有任何异常

with语句

Python提供了一个with语句,利用这个语句抽象出文件操作中频繁使用的try/except/finally相关的细节。对文件使用with可以大大减少代码量,而且不用关心文件IO是否未关闭的问题-with会自动帮助我们关闭

改写之前的代码:

def doWith():
    try:
        with open("这是一个不存在的文件.txt") as f:
            for each_line in f:
                print(each_line)
        print(f.read())
        sum = 1 + '1'
    except OSError as reason:
        print(str(reason))
doWith()

你可能感兴趣的:(Python自学笔记,Python自学系列)