【.com快译】对于码农来说,如果能写出有效的代码,就会带来成就感;那么当他们的代码出现缺陷甚至错误时,他们就会有深深的挫败感。因此,为了避免软件在运行过程中出现各种意想不到的错误,我们需要通过程序调试来排除各种代码级的错误。本文将以Python为例,讨论关于代码调试的八个良好实践。什么是Python异常?每当Python无法解释特定的目标代码或命令时,程序往往会抛出异常。Python的各种异常其实就是Python执行代码时出现的一组错误。通常,Python使用try和except块来触发各种错误异常。由于可执行命令通常位于try块中,当try中的代码失败时,Python将执行except块中的代码。换句话说,except关键字中的语句本质上是try块中的异常,Python只是将它们作为错误触发。当然,一个try...except块有时可能包含多个带有except关键字的异常。它包含许多我们在Python中经常看到的典型错误和细节。由于我们在使用各种内置函数、软件库或Python框架时可能会遇到异常,即使您仔细编写并遵守正确的语法,也不能保证相关方法在调用和执行时不会出错。比如你可能只写了5行左右的代码,但是Python程序会发现你正在使用的一个库、框架或者内置方法的源代码中有预定义的相关异常,所以会在line200.触发异常错误。语法错误当无法在语法级别识别程序代码时,Python通常会抛出语法级别的错误。如果你是Python的初学者,那么你可能会经常遇到这样的语法错误。但是,由于这些错误比那些深层次的异常更容易追溯,所以只要掌握了基础,就很容易合理地处理它们。如何调试Python代码Python中的典型异常包括:缩进、类型和名称错误。它们可以来自单行代码或代码块。虽然我们没有统一的处理方法,但是我们可以根据各种实例和项目类型来处理。下面,让我们详细讨论可用于调试Python的八种方法。它们可以单独使用或组合使用以增强效果。1.查看错误描述处理Python错误的一种可用方法是查看错误描述。Python通常会在其错误输出的最后一行给出详细说明。例如:在解析意外的EOF(EndOfFile)时,我们会发现它们通常与缺少括号有关。也就是说,当你试图从一个类或对象中调用一个错误的函数时,就会出现一个无效的语法错误,比如AttributeError。因此,借助最后一行的“预告片”,您通常可以成功地追踪到错误的来源并开始重写其相关代码。2、追查错误来源Python错误具有很强的代码行绑定(line-bound),遇到错误时需要注意Python指向的具体行号。例如,以下代码将产生类型错误,因为它试图连接不同的数据类型(字符串和整数)。错误信息指向示例代码中的第2行:示例代码:db=open("output.txt","a")a="Hello"+1b="Howdoyoudo?"db.write(a+","+b+"")报错信息:raceback(mostrecentcalllast):File"C:\Users\OmisolaIdowu\Desktop\Latooupew.py",line2,ina="Hello"+1TypeError:canonlyconcatenatestr(not"int")tostr我们来看看另一个错误示例:代码:deffindTotal(a):foriinaprint(sum(i)*2)错误信息:File"C:\Users\OmisolaIdowu\Desktop\Latooupew.py",line2foriina^SyntaxError:invalidsyntax显然,PythonA语法指出了第2行的错误。如果熟悉Python,一眼就能看出来:其实这是因为for循环后面少了一个冒号。3、在命令行中使用Trace方法虽然可以使用内置的集成开发学习环境(IntegratedDevelopmentandLearningEnvironment,IDLE)调试Python,但不一定适合大型软件项目。因此,调试Python的一种可用方法实际上是使用命令行界面(CLI)。它与在JavaScript中运行console.log()具有类似的效果。如果您在代码执行期间遇到错误,您可以启动CLI并使用trace命令尝试运行有问题的脚本。它的基本工作原理是逐行检查代码,分析发现问题的地方。要调用该方法,在命令行上,运行代码文件如下:python-mtrace--tracefile_name.py在大型项目中,像上面那样运行整个脚本是不切实际的,但你可以创建一个单独的Python文件,粘贴每个代码块(一次一个部分)一个一个地放入文件中,并单独运行上述命令。在这里,您可以将其视为单元调试的一种特定形式。4.测试你的代码除了上面提到的异常原因之外,错误的布尔值(boolean)有时会导致你的程序行为异常或者在部署时出错。单元测试通常需要隔离某些代码单元(块或行)以测试特定的性能、效率和正确性指标。它们对于程序代码都极其重要。在单元测试中,我们可以使用多种调试技术,通过assert函数来分析代码的正确性,查看代码运行所需时间等维度指标。在真实的生产环境中,我们可以创建一个名为test.py的单独Python文件,并测试该文件中的每个代码单元。以下片段显示了一个示例单元测试:data={"guitars":[{"Seagull":"$260"},{"Fender":"$700"},{"Electric-acoustic":"$600"}]}iflen(data["guitars"])==2:foriindata["guitars"]:print(i)assertlen(data["guitars"])==2,"Lengthlessthanwhat'srequired,shouldbe3"是可见的,由于数组长度小于3,所以Python会触发如下断言错误:AssertionError:Lengthlessthanwhat'srequired,shouldbe35.使用日志作为调试代码的另一种方式,Python有一个内置的日志库用于日志检查和勘误表。您可以点击链接-https://docs.python.org/3/howto/logging.html了解更多关于它的工作原理、如何在控制台中运行和捕获它们的信息。如果您觉得在部署应用的过程中无法通过控制台查看日志,可以设置简单邮件传输协议(SMTP),通过邮件的方式及时抓取和分析代码日志。6.使用标准的Python调试器Python有一个非常流行的板载调试器,叫做pdb。由于它是内置的,您只需要将pdb导入到被测文件中即可。pdb模块通过对代码采用post-mortem的方法,可以调试程序在运行过程中突然崩溃的情况。您可以使用pdb来运行整个Python文件,或者只执行某个单元来深入到程序的每一行,以查找潜在的错误。实际使用时需要先打开Python文件,然后使用importpdb;pdb.set_trace()启动pdb调试器。然后,您可以通过CLI运行要测试的Python文件(参见--https://www.makeuseof.com/run-python-script/):PythonYour_Python_file.py通过以下带h的命令,可以查看Apdb的所有可用命令列表:(pdb)h列表的输出如下图所示:例如,您可以使用以下命令逐行列出代码:(pdb)l7。使用IDE调试IDE也是用来调试Python脚本的宝贵工具。其中:VisualStudioCode(https://code.visualstudio.com/download)可以帮助您运行和调试Python程序中的各种功能。作为语言类支持插件,Pylance允许您在调试模式下运行您自己的代码。另一个很棒的IDEPycharm(https://www.jetbrains.com/pycharm/download/)可以帮助您更深入地挖掘代码中的错误。Eclipse(http://www.eclipse.org/downloads/packages/)还提供了一个名为Pydev的第三方插件,用于方便调试Python脚本。8.在线搜索解决方案鉴于Python拥有庞大的开发人员社区,您可能希望将Internet作为寻找Python代码问题解决方案的可靠资源。例如,Stackoverflow(https://stackoverflow.com/)是一个流行的代码社区,您可以在其中进行各种互动问答。当然,YouTube上也有大量关于Python编程的实用视频。原标题:HowtoDebugYourPythonCode,作者:IDOWUOMISOLA
