Python代码调试的那些“最少且必要”技巧

2023-06-05 0 1,144

Python代码调试的那些“最少且必要”技巧

极度处置组件能协助他们在运转前夕处置极度重要信息,但Python标识符除了更加此基础的严重错误——句法严重错误和方式论严重错误

句法严重错误相较单纯,在正则表达式的协助下,他们迅速就能功能定位严重错误所处。但对方式论严重错误的增容就难多了,那些句法或方式论微观的严重错误,形成了各种各样的标识符bug。

为的是增容严重错误,他们须要晓得,手忙脚乱时什么样表达式的值是恰当的,什么样表达式的值是严重错误的。因而,他们须要掌控许多标识符增容的基本上基本上功。

本序文自《Python极简短文:一两本书进阶数据挖掘与机器学习》那哥。这是两本通俗易懂、单纯易懂的Python极简短文,以掌控“最多必要性科学知识”为诗歌创作经营理念,对新手极为亲善!

Python代码调试的那些“最少且必要”技巧

Python代码调试的那些“最少且必要”技巧

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

0506   foo(0

)

运转结果

n = 0

———————————————————————ZeroDivisionError                         Traceback (most recent call last

)

……

<ipython-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行)和严重错误重要信息(division by zero),他们可以很容易地功能定位严重错误所处:标识符第4行,作为分母,n值为0。

02  assert断言

用print()检视表达式的不足之处在于,增容完毕后,他们还得手动将它们删掉,如果增容工作量较大,造成print()满天飞,删除大量print()语句的工作量也不容小觑。而且,如果程序中到处充斥着print()语句,输入重要信息也会非常繁杂,给程序员造成困扰。

因而,就有了第二种方式—断言(assert)。凡是可用print()来辅助查看的,都可以用assert来替代。它用来测试某个条件(condition)的布尔值,系统默认这个条件为真,此时断言悄然无息,他们感知不到它的存在。但是,一旦条件为假,就会触发极度。assert的句法格式如下。

assert <condition>   #第二种情况,不给出严重错误重要信息

在Python中,可以把assert理解为简化版的极度处置,它与如下语句等价。

if not   raise

 AssertionError

assert后面也可以紧跟参数,给出更加详细的严重错误重要信息,示例如下。

assert <condition> [, arguments]     #第二种情况,给出严重错误重要信息(可选项)

这种情况等价于如下语句。

if not

condition:

    raise

 AssertionError(arguments)

下面他们通过具体示例来说明assert的用法,见【例2】。

【例2】assert的用法(assert_no_err_msg.py)

01   def avg(score):02       assert len(score) != 003       return

 sum(score) / len(score)

0405

   score = []

06   print(“平均分数为:”

,avg(score))

运转结果

AssertionError                            Traceback (most recent call last

)

<ipython-input-11-56d552b0cddd> in <module

>

      4      5

 score = []

—-> 6 print(“平均分数为:”,avg(score))<ipython-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 为假,这时就会触发极度,导致程序终止运转。此时,如果将第05行标识符修改如下:

05   score = [90,85,78]

整个程序将能正常运转,运转结果如下。

平均分数为: 84.33333333333333

使用assert的好处在于,当判断条件为真时,用户是感觉不到assert的,因为assert只有当判断条件为假时才“刷存在感”,给出严重错误重要信息。严重错误重要信息一旦给出,在某种程度上就功能定位了标识符的bug所处,从而达到了程序增容的目的。增容完毕后,用户无须删除assert语句。

【例2】中的assert并没有给出严重错误重要信息,可读性不强。事实上,他们还可以显式给出严重错误重要信息。他们可以如下修改【例2】的第02行标识符。

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

这里,断言条件后面的”列表为空,咋整啊!”,是条件一旦为假时输入的严重错误重要信息。他们假设,此时第05行依然为空列表,这时【例2】的运转结果如下。

AssertionError                            Traceback (most recentcall last

)

<ipython-input-13-a477886d663d> in <module

>

      5

 score = []

      6 # score = [90,85,78]—-> 7 print(“平均分数为:”,avg(score))<ipython-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()类似的处境,极度重要信息会让他们“应接不暇”。如果不须要断言来帮忙,则在命令行启动Python正则表达式时可用“-O”参数来关闭assert,如下。

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

Python代码调试的那些“最少且必要”技巧

除了前面提到的借助print()assert进行增容,他们还可以使用IDE(如PyCharm等)进行增容,那些集成开发环境有着非常好用的“单步增容功能”,同时配合控制台的输入,也能比较便捷地功能定位严重错误。

当他们开发的项目规模比较大时,他们会发现,logging才是终极武器。logging是Python的日志组件。使用这个组件的好处在于,它允许他们指定记录重要信息的级别,有debug、info、warning、error等。

他们可以根据须要输入不同级别的重要信息。例如,当他们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debug和info就不起作用了。这样一来,他们就不

关于这个组件的科学知识,就留给“爱折腾”读者自学吧。高手,永远都是自学出来的!

Python代码调试的那些“最少且必要”技巧相关图书Python代码调试的那些“最少且必要”技巧

《Python极简短文:一两本书进阶数据挖掘与机器学习》是两本理论结合实战,娓娓道来的入门好书。书中提供了进阶数据科学领域的 极简必要性科学知识 

不同于其他图书,两本书不求全,但求精。这里的“精”是指,给出进阶数据挖掘的“极简必要性科学知识”( Minimal Actionable Knowledge and Experience,MAKE )。在极短的时间内,掌控数据挖掘的MAKE之道,这是两本书的一大特色。

Python代码调试的那些“最少且必要”技巧

两本书脉络

Python代码调试的那些“最少且必要”技巧

大咖推荐

董付国,知名Python讲者、16本Python系列图书作者魏梦舒,微信高扬博士,《白话强化学习与PyTorch》作者、金山办公AI技术专家JulyCSDN千万级流量博主、七月在线CEO

雷明,SIGAI创始人、《机器学习:原理、算法与应用》作者、百度前高级软件工程师

Python代码调试的那些“最少且必要”技巧如果喜欢本文欢迎在看留言分享至朋友圈 三连

  热文推荐 

零碎时间,7本便携的新书带你涨科学知识!

读书日上榜Top1,来听听写书背后的故事

陆奇:Chatbot将成为未来重要的人机交互窗口

一文理清基本上Java编程思想,以不变应万变

Python代码调试的那些“最少且必要”技巧Python代码调试的那些“最少且必要”技巧▼ 点击

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务