文源网,仅供学习,如有侵权请联系删除。在我们的程序运行中,难免会出现各种错误。这些错误也有多种原因。可能是代码逻辑有疏漏,我们没有考虑到某种情况;也有可能是由于用户的特殊操作,导致我们的程序陷入了一个没有涉及到的场景…….deftest(name):returnint(name)test("cbekd")比如上面的代码运行时会出现如下错误信息:Traceback(mostrecentcalllast):File"test.py",line3,在test()文件“test.py”,line2,intestreturnint("cbekd")ValueError:invalidliteralforint()withbase10:'cbekd'上面的错误消息是之前的调用发生这个错误的Trace信息,从上到下,就是程序从启动到错误发生的过程。在上面的例子中:第2-3行是我们调用test()方法的过程,第4-5行是因为我们将一个非数字字符串转换为数字类型而出错的地方,第6行是一个错误提示信息。所以我们需要修复的只是代码中第2行的错误。面对这些各种各样的问题,在初学者阶段,我们可以直接通过百度错误的提示信息找到导致这个错误的原因,然后找到解决这个问题的方法。但是当我们逐渐开始学习一些比较复杂和小众的模块时,直接在百度上寻找解决方案就变得越来越难了。这时候,我们需要习惯直接使用错误提示或者参考文档来解决问题。try...except...下面我们来了解一下Python提供的错误处理方法(try...except...finally...)。当我们认为某些代码可能有错误,导致后续代码无法正常运行时,我们可以使用try来运行这段代码。这时候,如果确实发生了错误,try中包含的代码中的后续代码将不会运行,而是直接跳转到except中的代码。不管try里的代码运行有没有出错,finally里的代码都会被执行。例如:try:print("try...before...")int("cbekd")print("tyy...after...")exceptValueErrorase:print("except...","detail:",e)finally:print("finally...")运行结果:try...before...except...detail:invalidliteralforint()withbase10:'cbekd'finally...每次尝试都可以有多个不同的异常来处理不同类型的错误情况。Python中所有的错误都是BaseException的子类,所以当我们无法预知代码中会出现什么样的错误,或者想要处理所有可能的错误时,我们可以使用exceptBaseException来处理所有的错误情况。Python文档中错误的关系详见:https://docs.python.org/3/lib...调试技巧不是问题源头的位置。比如,有时候我们发现错误是由于某个变量的值错误引起的,但是我们并不知道这个变量是从哪里开始出错的。此时,我们可以通过print()或assert等方法将各个阶段变量的值输出到控制台,进而找出错误是从哪一步发生的。这种调试方式通常称为“断点调试”。”。另外,Python内置的pdb模块提供了交互式代码调试功能,包括设置断点、单步调试等,可以用来辅助我们断点调试。比如添加后直接运行脚本时pdb.set_trace()到代码中,代码会停留在pdb.set_trace()的位置,等待我们输入命令。pdb常用的命令如下:比如前面的例子,我们使用pdb加断点,代码如下。importpdbdeftest(name):pdb.set_trace()returnint(name)test("cbekd")运行以上代码,得到如下结果((pdb)后面的内容为输入命令):>test.py(5)test()->returnint(name)(Pdb)ppname'cbekd'(Pdb)nValueError:invalidliteralforint()withbase10:'cbekd'>test.py(5)test()->returnint(name)(Pdb)你在学习Python的路上肯定会遇到困难,别慌,我这里有一套学习资料,包括40+电子书,800+教学视频,涉及Python基础、爬虫、框架、数据分析、机器学习等等,不怕你学不会!https://shimo.im/docs/JWCghr8...《Python学习资料》关注公众号【蟒圈】,每日优质文章推送。