Python 学习之异常

阅读文本大概需要 6 分钟

写在前面

周末的时候写了一篇文章「无问西东」,也许是这部电影背后所折射的道理说出了大多数人的心声,使得大家都深有感触,纷纷留言。

确实,于每个人而言,青春也不过只有这些日子,平平凡凡也好,轰轰烈烈也罢,只是不同的人生态度。重要的是忠于自己的内心,做让自己开心的事、有价值的事,愿且行且珍惜。

Python

1

异常简介:

  • 异常是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在 Python 无法正常处理程序时就会发生一个异常。异常是 Python 对象,表示一个错误。当 Python 脚本发生异常时我们需要捕获处理它,否则程序会终止执行
  • 造成异常的原因:1. 程序编写有问题造成,产生 Bug ,必须处理 2. 用户输入造成的 3. 无法预料的异常:磁盘已满、断网等
  • Python 的错误其实也是类 class,错误类型种类很多。而且所有的错误类型都继承自 BaseException
  • 为什么要处理异常?为了使程序遇到问题时不让程序结束,而越过错误继续向下执行。Python 内置了一套异常处理机制,来帮助我们进行错误处理
  • 处理异常:try except finally 作用:try 语句块用来检测程序中的错误,从而让 except 语句捕获错误信息并处理。执行完 except 后,如果有 finally 语句块,则执行 finally 语句块,至此,执行完毕。

2

常用操作

报出对应异常1

try:

    print(3 / 0)

except ZeroDivisionError as e:

    print("除数为零了")

except NameError as e:

    print("变量未定义")

else:   # 注意:else语句可有可无

    print("代码没有问题")

print("程序继续执行")

except 常规异常的基类2

try:

    print(4 / 0)

except:  # 使用 except 捕获常规错误,而不使用任何的错误类型

    print("程序出现了错误")


# 使用 except 带着多种异常,匹配到其中一种即报错

try:

    print(5 / 0)

except(NameError, ZeroDivisionError):

    print("出现了 ZeroDivisionError 或 NameError")

特殊情况3

"""

特殊:

1.错误其实是 class(类),所有的错误都继承自 BaseException,所以在

捕获的时候,它不仅捕获了该类型的错误,还把子类一网打尽

"""


try:

    print(5 / 0)

except BaseException as e:

    print("出现了BaseException")

except ZeroDivisionError as e:  # 不会被执行

    print("除数为零了")


"""

2.跨越多层调用,main 调用了 func2 ,2 调用了 1 ,

1 出现了错误,但是只要main捕获到了就可以处理

"""


def func1(num):

    print(1 / num)

def func2(num):

    func1(num)

def main():

    func2(0)

try:

    main()

except ZeroDivisionError as e:

    print("调用的函数出现了错误")

try except finally4

try:

    print(1 / 0)

except ZeroDivisionError as e:

    print("除数为零了")

finally:

    print("finally是一定会被执行的")


try:

    print(1 / 0)

finally:

    print("finally是一定会被执行的")

print() 语句调试5.1

"""

通过 print() 把可能有问题的变量打印出来

用 print()最大的坏处是将来还得删掉它,

想想程序里到处都是print(),运行结果也会包含很多垃圾信息

"""


def div(a, b):

    print(b)  # b可能会为 0

    print(a / b)

div(10, 1)

assert 断言调试5.2

"""

用 print() 来查看的地方,都可以用断言(assert)来替代:

断言失败时,assert 语句本身就会抛出 AssertionError

"""

def func(num, div):

    assert (div != 0), "div不能为零"

    return num / div

print(func(10, 0))

logging 调试5.3

import logging

logging.basicConfig(level=logging.DEBUG)


"""

logging 的好处:允许你指定记录信息的级别,有debug,info,warning,error

4个级别,当我们指定 level=logging.INFO 时,logging.DEBUG 就不起作用了。

级别高的覆盖级别低的,所以可以输出不同级别的信息,也不用删除,最后统一控制输出各个级别的信息。

logging的另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如console和文件

"""

def div(a, b):

    logging.info(b)

    print(a / b)

div(10, 0)

写在最后

最后给大家推送波福利!如果你打算入手或着正在学习Python,欢迎加入我们一起学习。后台回复「Python」,获取到你想要的资源。同时我们组建了一个Python技术学习群,里面大佬与小白都有,有良好的学习氛围。想要进群学习的,加 Mark 微信「IMark950831」,备注「加群」,期待你的到来!

好了,今天的分享就到这了,觉得写得不错的,点赞转发支持下。

点赞、转发是一种态度。

原文发布于微信公众号 - Python梦工厂(AzMark950831)

原文发表时间:2018-06-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LuckQI

Java核心技术讲解学习

992
来自专栏蛋未明的专栏

[推荐]php编码规范

2054
来自专栏诸葛青云的专栏

3分钟读懂C语言函数:这些例子一看就懂!|一键删除账户教学

最近发现,有些小伙伴对C语言的函数有些难以理解,其实呢,C语言的函数很好理解,只不过部分人在学习的时候,没有找到好的例子来类比理解而已。这篇文章会教大家如何去理...

712
来自专栏生信技能树

生物信息Python从入门到精通

编者注:本文来自生信编程直播课程讲师投稿,点击阅读原文可以跳转到大神的博客,欢迎点击! 以下为文章全文: Python开发的方向太多了,有机器学习,数据挖掘,...

32412
来自专栏WindCoder

异步JavaScript:从回调地狱到异步和等待

这是一个典型的异步编程挑战,您如何选择处理异步调用,在很大程度上,会导致或破坏您的应用程序,并且可能是您的整个启动。

1041
来自专栏人工智能

机器学习如何从 Python 2 迁移到 Python 3

关键时刻,第一时间送达! ? 本文经授权转自人工智能头条。 Python 已经成为机器学习及其他科学领域中的主流语言。它不但与多种深度学习框架兼容,而且还包含优...

2356
来自专栏积累沉淀

Javascript模块化编程(一)

随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂。 网页越来越像桌面程序,需要一个团队分工协作、进度管理、单元测...

35110
来自专栏决胜机器学习

设计模式专题(二)——策略模式

设计模式专题(二)——策略模式 (原创内容,转载请注明来源,谢谢) 一、概述 1、含义 策略模式(Strategy)是一种定义了各类算法的模式,其将各种算法...

3258
来自专栏编舟记

Clojure集合管道函数练习

TDD讨论组里的申导最近在B站直播了Martin Fowler的经典文章Refactoring with Loops and Collection Pipeli...

902
来自专栏架构师之路

Google-LevelDB简介

LevelDB简介 LevelDB一句话描述 LevelDB是google开发的,一个速度非常块的KV存储库(storage library),它支持字符串的k...

3765

扫码关注云+社区