这篇文章主要介绍了七个初学者常犯的Python调试错误,并告诉大家如何去避免这些错误。

1.具有副作用的功能

由于Python不是像Haskell这样的纯函数式语言,因此会产生副作用。 严格来说,这不是一个错误,但是很容易无意间手忙脚乱。 下面的示例演示了该问题。

在Python中,对象是引用类型。 因此,当您将列表作为参数传递时,将传递引用而不是值。 这意味着,如果您在函数中更改它们,则更改将反映在外部。

这可能会导致一些非常令人讨厌的意外情况和浪费我们的时间去调试。 请及时提防这些错误,减少麻烦。

2.默认参数中的函数调用

默认参数有时很难使用。 看一下以下内容。

为什么每次调用的返回值都一样? 原因是在定义函数时,Python会在默认参数中计算表达式。 如果要动态生成默认参数,则可以执行以下操作。

3.可变的默认参数

此问题是以上两个的结合。 您是否遇到过以下情况?

这里发生两件事。

1.定义函数后,Python会对表达式[[]求值。 (这相当于调用list()。)

该对象的引用绑定到参数。 因此,无论何时调用该函数,都将使用相同的对象。

2.因此,使用可变对象作为默认参数不是一个好主意。 你绝对不应该那样做。

4. 参考覆盖

如我们所见,每个对象都是Python中的引用类型。 除了将它们传递给函数之外,这还可能引起一些混乱。 请参见以下示例:

当执行b = a时,实际上存储了a的引用。 因此,a和b指向同一对象。 要解决此问题,您应该使用内置的Deepcopy功能。 这将所有值类型的属性递归复制到新变量中。

如果使用整数而不是list尝试相同的操作,则所有操作的行为都将与您期望的一样。 原因是整数类型是不可变的,因此在更改它们时会覆盖引用。

5.从东西导入*

我知道,我们都做到了这一点。 这有几个缺点。

首先,不同名称空间中的函数可以具有相同的名称,从而导致整个代码库混乱。

其次,当您在Python中导入模块时,该模块中的所有代码都将被执行。 如果有很多子模块要导入,这会大大降低速度。 因此,如果仅导入NumPy以生成随机数,则最好使用下面方法:

than

6.使用字符串串联连接路径

假设您必须从变量data_folder给定的文件夹中打开一个名为data.csv的文件。 应该如何确定文件路径? 如果你在做:

那你做错了。 例如,这在Windows上将不起作用。 您可能没有经验,但是使用不同开发设置的你的同事肯定会感到痛苦。

为了解决这个问题,您应该使用Python的内置工具pathlib或简单地使用os.path.join函数:

7. 测试覆盖率低

这是一个高水平的问题。 尤其是当您是初学者时,单元测试的好处尚不清楚。 但是,每个经验丰富的开发人员都可以告诉您,这是绝对必要的。 使用未经测试的代码就像打个模子:修复一个错误,引入另一个错误。

为了避免这些错误,从项目的开始就应该注意。 添加功能(甚至功能)后,应立即编写测试用例以验证能否跑通。 有很多很棒的库,例如内置的unittest或非常流行的pytest。

应该认真投入时间来测试您的代码。 这样做可能需要一些时间,但这是一项长期投资。 您将节省更多的调试时间。

简而言之,这是您在Python中可能犯的七个最痛苦的错误。 在追求Python熟练度的过程中,您肯定还会遇到更多。 但是,有了本指南,您将有知识来避免这些出现最频繁的错误。

python编程新手常犯的错误_初学者开发人员都会犯的7个Python错误相关推荐

  1. python编程新手常犯的错误_Python程序员常犯的10个错误

    BY- SENIOR SOFTWARE ENGINEER @TOPTAL About Python 关于Python Python is an interpreted, object-oriented ...

  2. python编程的基本方法有哪些_学习Python编程的11个入门技巧

    我们非常激动,您决定开始学习Python的旅程!我们从读者那里收到的最常见问题之一是"学习Python的最佳方法是什么?" 我相信学习任何编程语言的第一步就是要确保您了解如何学习. ...

  3. 基于arcgis的python编程秘笈第2版_基于ArcGIS的Python编程秘笈(第2版)

    基于ArcGIS的Python编程秘笈(第2版) 译者简介 审阅人简介 1 面向ArcGIS的Python语言基础 1.1 使用IDLE进行Python脚本开发 1.1.1 Python Shell窗 ...

  4. python编程基础的阅读心得体会_学习Python的一些心得体会(熊逸飞)

    PART 2 第一章作者没有抛出过多内容,只是简单介绍了Python作为编程语言的一些比较优势,然后介绍它的历史和创始人的故事.从90年首次发布到现在经历了十几次优化才有了如今我们使用的Python, ...

  5. Python编程新手看过来,如何求素数 (Python学习教程)

    本期的Python学习教程是针对新入门Python编程的新手来写的:关于怎么求素数! 一.什么是素数? 素数就是质数,通俗点说就是只能被1和其本身整数的数就是素数(1除外) 举个例子: 2,3,4,5 ...

  6. 是否似曾相识?每个开发人员都犯过的15个错误

    是否似曾相识?每个开发人员都犯过的15个错误 犯错是人之常情,也是促进我们成长的关键,不必惧怕犯错.请试着从他人的错误中学习借鉴,以免今后重蹈覆辙. 在长寿命的代码中使用快速粗糙的修复程序.快速粗糙的 ...

  7. Java开发人员经常犯的10大错误

    我们在这里总结了Java开发人员经常犯的十大错误,看看你中了几个? 1.将Array转换为ArrayList 要将Array转换为 ArrayList,开发人员通常会这样做: List<Stri ...

  8. java每个阶段的学习时间_每个Java学习者都会犯的10个最常见的1个错误

    java每个阶段的学习时间 据说:"您的朋友会吞下您的错误,您的敌人会将它们呈现在盘子上". 我绝对不是你的敌人,但我想向您介绍一些针对每个Java初学者的错误,我将在此博客&qu ...

  9. python中冒号报错_python中一些常见的错误_后端开发

    PHP8 新特性之 Attributes_后端开发 PHP8的Alpha版本,过几天就要发布了,其中包含了不少的新特性,今天呢,我想谈谈Attributes,为啥呢, 是昨天我看到很多群在转发一个文章 ...

最新文章

  1. “重置”不是“清空”
  2. Python技巧之函数拆包裹
  3. 知乎:中国工商银行南宁分行丢失2.5亿,工作人员个人行为,与银行无关
  4. 【问链-区块链基础知识系列】 第十五课 数字货币交易所的前世、今生和未来(二)
  5. 中国第五届CSS大会分享:CSS TIME
  6. Python基础案例练习:掷骰子小游戏
  7. 如何将linux内核的带级别控制的printk内容打印出来
  8. 云计算的未来是什么?
  9. 全新外卖侠CPS全套源码,2021外卖CPS分销小程序源码
  10. 可能是最全的h5唤起App方案
  11. ehcache使用java_Java分布式缓存框架Ehcache 使用(一)
  12. 用python+turtle画太阳花
  13. 机器学习模型效果评估指标与方法介绍
  14. 数据结构基础之基础(数据、计算机结构)
  15. DirectX11 使用Cube Mapping 立方体环境贴图实现天空、物体反射效果
  16. layer添加元素 openlayer_OpenLayers 官网例子的中文详解
  17. ArcMap出图小技巧:主图设计、图例、比例尺、指北针、标题
  18. 无线通信模块——WiFi,蓝牙,2.4G
  19. 刚开始做淘宝运营应该怎么入手?
  20. Ubuntu onenote下载安装使用

热门文章

  1. 详解c++[指针的指针] 和 [指针的引用]
  2. tensorflow之pd模型
  3. python中pass的用法_python学习之getpass模块使用
  4. github里的默认域_FProbe 获取域/子域的列表,并探查工作中的http / https服务器。...
  5. Java中找出s字符串的回文_给定一个字符串 s,找到 s 中最长的回文子串。
  6. python 全部缩进一行_Python成为专业人士笔记–程序行空白及tab缩进的作用
  7. java contenttype_SpringMVC Content-Type解析
  8. mysql修改密码5.7_mysql数据库5.7版修改密码详细(centos7)
  9. python常用小技巧_Python 实用技巧
  10. android 挖孔屏适配_小米公布安卓Q升级适配计划,共11款机型