前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天 3 分钟,小闫带你学 Python(二十五)

每天 3 分钟,小闫带你学 Python(二十五)

作者头像
小闫同学啊
发布2019-08-20 12:09:39
5980
发布2019-08-20 12:09:39
举报
文章被收录于专栏:小闫笔记小闫笔记
正文共:2122 字 6图 预计阅读时间:6分钟

每日分享

Everything you can imagine is real.

敢于梦想的终将被实现。

小闫语录:

世界上的知识分为下列几种:知道自己知道的,知道自己不知道的,不知道自己知道的,不知道自己不知道的。只要能被想象到的,终有实现的方法。

前言

昨天的文章『每天 3 分钟,小闫带你学 Python(二十四)』讲解了文件的相关操作:

1.打开文件使用 open,关闭文件使用 close

2.读数据使用 read,写内容使用 write

3.文件或文件夹的相关操作使用模块 os

学习目标

1.了解什么是异常

2.学会如何捕获异常

3.了解如何抛出异常

1.异常

我们在执行程序的时候,总是会报一些错误,那扎眼的一抹红色,是令所有程序员头疼的噩梦。今天就详细讲讲这些错。

Python 中错误有两种,一种是语法错误,一种是异常。

1.1 语法错误

语法错误为写的代码不符合语法规则。比如大家一不小心忘记写个冒号,一不小心函数写错一个字母之类的粗心错误。当我们在条件判断时,忘记写冒号,会显示如下错误:

代码语言:javascript
复制
if True
          ^
SyntaxError: invalid syntax

这时候先不要慌乱,也不要想着怎么解决,第一步先打自己脑门一下,连基础知识都没记住!语法分析器指出了出错的一行,并且在最先找到错误的位置标记了一个小小的 ^(箭头),怕你看不见,找不到错误。瞧,多贴心?

1.2 异常

有些人会问,我的 Python 程序的语法是正确的,检查了很多遍呢,真的!但是为什么运行时还会报错?那就说明你遇到了异常。比如下列的错误:

代码语言:javascript
复制
# 示例1:0不能做除数
    10/0
ZeroDivisionError: division by zero

# 示例2:变量num没做定义
    print(num)
NameError: name 'num' is not defined

# 示例3:r访问模式的特点
    open("hm.txt", "r")
FileNotFoundError: [Errno 2] No such file or directory: 'xxoo.txt'

这些问题就是有点深度的问题了,要注意了!其实也没必要太紧张,错误信息显示的很详细,会告诉你在哪里错误,是什么错误,只要根据提示都会解决,唯一的要求就是会英文。多么痛的领悟 ~

先来尝试翻译一个错误:

代码语言:javascript
复制
FileNotFoundError: [Errno 2] No such file or directory: 'xxoo.txt'
# 文件未发现:没有 `xxoo.txt` 这个文件或者目录

瞧,多么直白

对于错误的信息还要有一些基本认识:

代码语言:javascript
复制
# 例如示例异常:
NameError: name 'num' is not defined
# NameError -> 异常类型
# name 'num' is not defined -> 异常的信息描述

1.3 捕获异常

程序开发时,很难将所有的特殊情况都处理的面面俱到,通过捕获异常可以针对突发事件做集中的处理,从而保证程序的稳定性健壮性

对某些代码的执行不能确定是否正确,可以增加 try(尝试)捕获异常。捕获异常的语法如:

代码语言:javascript
复制
try:
    # 尝试执行的代码
except 错误类型1:
    # 针对异常类型1,对应的代码处理
except 错误类型2:
    # 针对异常类型2,对应的代码处理
except (错误类型3, 错误类型4):
    # 针对异常类型3 和 4,对应的代码处理
except Exception as e:
    # 针对未知异常,对应的代码处理
    # 变量e保存的是异常的信息描述
else:
    # 只有在没有异常时才会执行的代码
finally:
    # 无论是否有异常,都会执行的代码

下面看一个实例:

代码语言:javascript
复制
try:
    a = 1 / 0
except ZeroDivisionError:
    print("分母不能为0")
finally:
    print("捕获错误执行完成")

1.4 异常的传递

当函数或者方法执行代码时出现异常,会将异常传递给函数或者方法的调用一方,如果传递到主程序,仍然没有异常处理,程序才会被终止。

需求:定义函数 demo1() 完成输入 num,定义函数 demo2() 调用 demo1(),在主程序中调用 demo2()。

代码语言:javascript
复制
def demo1():
    print(num)

def demo2():
    demo1()

demo2()

在执行以上代码,会发生异常,可以使用下面代码进行捕获异常。

代码语言:javascript
复制
try:
    demo2()
except NameError:
    print("请输入正确的名字")
except Exception as result:
    print("未知错误 %s" % result)

在开发中,当在主函数中调用的其他函数时,可以只为主函数增加异常捕获,因为Python中的异常是可以传递的,所有只要出现异常,都会传递到主函数的异常捕获中。这样就不需要在代码中,增加大量的异常捕获,能够保证代码的整洁。

作业

1.书写一个函数,故意犯错,然后进行异常捕获。

2.自定义两个函数 A 和 B,验证异常的传递。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每日分享
  • 前言
  • 学习目标
  • 1.异常
    • 1.1 语法错误
      • 1.2 异常
        • 1.3 捕获异常
          • 1.4 异常的传递
          • 作业
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档