我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

脚本主页

您加入数百万开发者行列

异常处理模块可以帮助我们处理运行时的异常信息,但是代码中还有更基本的错误——语法错误和逻辑错误。

语法错误比较简单,借助解释器,我们可以快速定位错误。但调试逻辑错误要困难得多。这些语法或逻辑错误构成了各种代码错误。

为了调试错误,我们需要知道错误发生时哪些变量具有正确的值,哪些变量具有错误的值。因此,我们需要掌握一些代码调试的基本技巧。

本文节选自《极简讲义:一本书介绍数据分析和机器学习》一书。这是一本极简主义的讲义,图片和文字丰富,易于阅读。它以掌握“最少必要知识”为写作理念,对初学者非常友好!

python的if not_python的if not_python的if not

01 使用print()输出观察变量

第一种方法,简单有效,直接粗暴,就是使用print()打印出需要观察的变量,如下所示。

【示例1】print()输出观察变量(print-err.py)

01   def foo(s):
02       n = int(s)                     #字符串转换为整型
03       print('n = {}'.format(n))   #输出观察变量n的值
04       return 10 / n
05   
06   foo('0')

运行结果

n = 0
---------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
……
input
-9-d21f20e5d17e> in foo(s)
      2     n = int(s)
      3     print('n = {}'.format(n))
----> 4     return 10 / n
      5 
      6 def main():
ZeroDivisionError: division by zero

根据打印信息(第3行)和错误信息(按零),我们可以很容易定位到错误所在:代码第4行,作为分母,n值为0。

02 断言

使用print()来观察变量的缺点是调试后我们必须手动删除它们。如果调试工作量很大,而且print()到处都是,删除大量print()语句的工作量也不会小。留意。而且,如果程序中充满了print()语句,输出的信息将会非常复杂,给程序员带来麻烦。

因此,就有了第二种方法——()。任何可以使用 print() 查看的内容都可以使用。用于测试某个条件()的布尔值。系统默认将此条件视为 true。此时断言是无声的,我们无法感知到它的存在。然而,一旦条件变为假,就会触发异常。语法格式如下。

assert    #第一种情况,不给出错误信息

中,可以理解为异常处理的简化版,相当于下面的语句。

if not     
   raise AssertionError

它还可以跟随参数以提供更详细的错误信息。示例如下。

assert  [, arguments]     #第二种情况,给出错误信息(可选项)

这种情况相当于下面的语句。

if not condition:
    raise AssertionError(arguments)

下面我们通过具体例子来说明用法,参见【例2】。

[示例2]用法(.py)

01   def avg(score):
02       assert len(score) != 0
03       return sum(score) / len(score)
04   
05   score = []
06   print("平均分数为:",avg(score))

运行结果

AssertionError                            Traceback (most recent call last)
input
-11-56d552b0cddd> in <module>
      4 
      5 score = []
----> 6 print("平均分数为:",avg(score))
input-11-56d552b0cddd> in avg(score)
      1 def avg(score):
----> 2     assert len(score) != 0
      3     return sum(score)/len(score)
      4 
      5 score = []
AssertionError:

代码分析

由于代码第05行是一个长度为0的空列表,因此第02行的判断条件len(score) != 0将会为false,并会触发异常,导致程序终止。此时如果将第05行代码修改如下:

05   score = [90,85,78]

整个程序会正常运行,结果如下。

平均分数为: 84.33333333333333

使用它的好处是,当判断条件为真时,用户感觉不到,因为只有当判断条件为假时,“存在感”才会被“刷新”,并给出错误信息。一旦给出错误信息,就可以在一定程度上定位到代码中的bug,从而达到程序调试的目的。调试完成后,用户无需删除该语句。

[示例2]没有给出错误消息并且可读性不是很好。事实上,我们也可以明确地给出错误信息。我们可以将[示例2]的第02行修改如下。

assert len(marks) !0"列表为空,咋整啊!"

这里,“列表是空的,我该怎么办?”断言条件后面是条件为假时输出的错误消息。我们假设此时第05行仍然是一个空列表。此时【例2】的运行结果如下。

AssertionError                            Traceback (most recent call last)
input
-13-a477886d663d> in <module>
      5 score = []
      6 # score = [90,85,78]
----> 7 print("平均分数为:",avg(score))
input-13-a477886d663d> in avg(score)
      1 def avg(score):
----> 2     assert len(score) != 0,  "列表为空,咋整啊!"
      3     return sum(score) / len(score)
      4 
      5 score = []
AssertionError: 列表为空,咋整啊!

显然,有了错误消息,就更容易找到代码哪里出错了。

如果断言太多,我们就会遇到类似print()的情况,我们会被异常信息“淹没”。如果不需要断言来帮助,可以在从命令行启动解释器时使用“-O”参数将其关闭,如下所示。

python -O assert_no_err_msg.py    #选项是大写的字母O,而非数字0

除了前面提到的使用 print() 进行调试外,我们还可以使用 IDE(如等)进行调试。这些集成开发环境都有一个非常好用的“单步调试功能”。同时结合控制台的输出,更容易定位错误。

当我们开发的项目规模比较大的时候,我们会发现它就是终极武器。是的日志记录模块。使用该模块的好处是它允许我们指定日志信息的级别,包括debug、info、error等。

我们可以根据需要输出不同级别的信息。例如,当我们指定 level=INFO 时,.debug 不起作用。同理,指定level=后,debug和info就不起作用了。这样,我们就不用担心过多的输出信息会稀释注意力。

该模块的知识就留给《爱折腾》读者自行学习。大师都是自学成才的!

python的if not_python的if not_python的if not

相关书籍

python的if not_python的if not_python的if not

《极简讲义:数据分析与机器学习入门书》是一本很好的入门书,理论联系实际,讲解得深入浅出。本书提供了数据科学领域入门所需的极简知识!

与其他书不同,本书不求完美,而是求精。这里的“精”是指入门级数据分析的“极简必备知识”(以及MAKE)。在很短的时间内掌握数据分析的MAKE方法是本书的一大特色。

▊ 本书的背景

python的if not_python的if not_python的if not

▊ 大牌推荐

祝福

利润

知道了

小编为我们爱读书的书友赠送免费书籍。

留言、点赞、送书规则

留言点赞:留言分享你在学习或者使用开发过程中的学习心得,或者其他一些学习心得。

>>>活动参与

玩法一:机会永远是自己争取的!编辑会选择评论,页面上会显示选中的评论(由于微信功能限制,最多只能显示100条)。活动结束点赞数最多的前2名好友将获得纸质版《极简讲义:数据分析与机器学习入门书籍》。

玩法2:踩在地板上送书。活动结束,踩到百度云文件中指定楼层已投放的精选留言,即可获得《极简讲义:数据分析与机器学习入门书籍》一本,共3人获奖,我们将在活动结束后在本公众号公布获奖楼层的解压密码。

中奖楼层下载地址(文件解压密码将在2020年5月12日推送的中奖文章中公布)

百度云链接:

提取码:kx5h

特别声明:

1. 一名用户一个月内只能有一次获奖机会。让更多粉丝受益更有意义。

2.每个用户只有一次留言机会,不允许重复留言~

请记住这三个1

活动截止时间:2020年5月12日16:00整。

只需点击所选书籍的蓝色字母即可

二维码
扫一扫在手机端查看

本文链接:https://by928.com/6980.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线