Python bug终结者:常见错误+异常处理+程序调试+错误代码

本文主要是介绍Python bug终结者:常见错误+异常处理+程序调试+错误代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(一).常见错误
  1. 缺少冒号引起错误:在 if,else,else,while,class,def 声明末尾需要添加冒号 :,若忘记添加将会提示“SyntaxError:invalid syntax”的语法错误。
  2. 将赋值运算符 = 和比较运算符 == 混淆:将会提示“SyntaxError:invalid syntax”的语法错误。
  3. 代码结构的缩进错误:将会提示错误信息如“IndetationError:unexpected indent”、“IndentationError:unindent does not match any outer indetation level”和“IndentationError:expected an indented block”
  4. 修改元组和字符串的值时报错
  5. 连接字符串和非字符串:将会提示错误“TypeError:Can‘t convert ’int‘ object to str implicitly”。
  6. 在字符串首尾忘记加引号:将会提示错误“SyntaxError:EOL while scanning string literal”。
  7. 变量或者函数名拼写错误:将会提示错误“NameError:name ’xxx‘ is not defined”。
  8. 引用超过列表的最大索引:将会提示错误”IndexError:list index out of range“。
  9. 使用关键字作为变量名:将会提示错误”SystaxError:invalid syntax“。
  10. 变量没有初始值就使用增值操作符:将会提示错误“NameError:name ’xxx‘ is not defined”。
  11. 误用自增和自减运算符:将会提示错误”SystaxError:invalid syntax“。
  12. 忘记为方法的第一个参数添加self参数:将会提示错误”TypeError:myMethod() takes 0 positional arguments but 1 was given“。
(二)异常

1.异常的概念
当Python解释器遇到一个无法预期的程序行为时,它就会输出一个异常(exception)。例如遇到除以零,或是打开不存在的文件等。用户也可以使用raise语句,来抛出一个异常。当Python解释器遇到异常情况时,它会停止程序的运行,然后显示一个追踪(traceback)信息。
2.内置异常
Python的内置异常定义在 exceptions 模块中,此模块在Python解释器启动时就会自动加载
最常用的异常类的含义如下:
(1) BaseException:所有异常的基类。
(2) SystemExit:解释器请求退出。
(3) KeyboardInterrupt:用户中断执行。
(4) Exception:常规错误的基类。
(5) StopIteration:迭代器没有更多的值。
(6) GeneratorExit:生成器(generator)发生异常来通知退出。
(7) SystemExit:Python解释器请求退出。
(8) StandardError:所有的内置标准异常的基类。
(9) ArithmeticError: 所有数值计算错误的基类。
(10) FloatingPointError:浮点计算错误。
(11) OverflowError:数值运算超出最大限制。
(12) ZeroDivisionError:除(或取模)零 (所有数据类型)的错误。
(13) AssertionError:断言语句失败。
(14) AttributeError: 对象没有这个属性。
(15) EOFError:没有内置输入,常见的为文件读取错误,另外,Ctrl+D也会触发这个异常。
(16) EnvironmentError:操作系统错误的基类。
(17) IOError:输入/输出操作失败。
(18) OSError:操作系统错误。
(19) WindowsError:系统调用失败。
(20) ImportError:导入模块/对象失败。
(21) KeyboardInterrupt:用户中断执行(通常是Ctrl+C)。
(22) LookupError:无效数据查询的基类。
(23) IndexError:序列中没有此索引(index)。
(24) KeyError:映射中没有这个键。
(25) MemoryError:内存溢出错误(对于Python 解释器不是致命的)。
(26) NameError:没有声明对象或没有初始化对象。
(27) UnboundLocalError:访问未初始化的本地变量。
(28) ReferenceError:试图访问已经垃圾回收了的对象。
(29) RuntimeError:一般运行时的错误。
3.使用try…except语句处理异常
try…except语句用在处理Python所输出来的异常。
其语法为:

try:<语句>
except [<异常的名称> [, <异常类的实例变量名称>]]:<异常的处理语句>
[else:<没有异常产生时的处理语句>]

中括号 [ ] 内的语法是可以省略的
异常的名称可以是空白的,表示except语句处理所有类型的异常
异常的名称也可以是一个或多个
可以使用多个不同的except语句来处理不同的异常
else语句是没有异常发生时的处理程序
4.异常类的实例
每当有一个异常被输出时,该异常类就会创建一个实例,此实例继承了异常类的所有属性。每一个异常类实例,都有一个args属性。args属性是一个元组格式,这个元组格式可能只包含错误信息的字符串(1-tuple),也可能包含2个以上的元素(2-tuple,3-tuple,…)。
异常类的不同,这个元组格式也不同。
5.清除异常
try…finally语句可以用来当作清除异常的功能。不管try语句内是否运行失败,finally语句一定会被运行。
注意: try与except语句可以搭配使用,try与finally语句也可以搭配使用,但是except与finally语句不可以放在一起。
6.内置异常的协助模块

  • a、sys模块
    使用sys模块的exc_info()函数,可以取得目前正在处理的异常信息。exc_info()函数会返回一个元组,这个元组包括三个元素(类型、值、具体信息)。

  • b、traceback对象
    使用sys模块的exc_info()函数返回值的第三个元素,会返回一个traceback对象。traceback对象的接口函数可以捕捉、格式化,或是输出Python程序的堆栈追踪(stack trace)信息。
    traceback.print_exc():此函数调用sys.exc_info()来输出异常的信息。

7.抛出异常

  • a、raise语句:Python使用raise 语句抛出一个指定的异常。例如:
    >>>raise NameError('这里使用raise抛出一个异常')Traceback (most recent call last):File "<pyshell#13>", line 1, in <module>raise NameError('这里使用raise抛出一个异常')NameError: 这里使用raise抛出一个异常

raise 唯一的一个参数指定了要被抛出的异常,必须是一个异常的实例或者是异常的类(即Exception的子类)。
提示:若只想判断是否抛出一个异常而不想去处理它,此时使用raise语句是最佳的选择。

  • b、结束解释器的运行:用户可以利用输出SystemExit异常,来强迫结束Python解释器的运行。
    使用sys.exit()函数会输出一个SystemExit异常,sys.exit()函数会结束线程。
    若想正常结束Python解释器的运行,最好使用os模块的_exit()函数
  • c、离开嵌套循环:如果想离开循环的时候,通常是使用break语句。如果在一个嵌套循环之内,break语句只能离开最内层的循环,而不能离开嵌套循环,此时可以使用raise语句离开嵌套循环。

8.用户定义异常类
除了内置异常,Python也支持用户定义的异常。用户定义的异常与内置异常并无差别,只是内置异常是定义在exceptions模块中。当Python解释器启动时,exceptions模块就会事先加载。
Python允许用户定义自己的异常类,用户定义的异常类必须是从任何一个Python的内置异常类派生 而来。
还可以将创建的用户定义异常类,再当作其他用户定义异常类的基类。
通常异常类在创建时均以”Error“结尾,与标准的异常命名一样

(三).程序调试
  • a、使用assert语句
    通过使用assert语句,可以帮助用户检测程序代码中的错误。
    assert语句的语法格式:
    assert <测试码> [, 参数]
    测试码是一段返回True或是False的程序代码。
    若测试码返回true,则继续运行后面的程序代码。
    若测试码返回false,assert语句会输出一个AssertionError异常。并且输出assert语句的[参数],作为错误信息字符串。

  • b、使用__debug__内置变量

Python解释器有一个内置变量__debug__,__debug__在正常情况下的值是True。
>>> __debug__
True
当用户以最佳化模式启动Python解释器时,__debug__值为False。要使用最佳化模式启动Python解释器,须设置Python命令行选项-O。
语法格式:
if __debug__:if not (<测试码>):raise AssertionError [,参数]
(四)错误代码

Python的errno模块,包含许多错误代码(errno)的系统符号(system symbol)。errno模块用在定义操作系统所返回的整数错误码,及其对应的系统符号。
当用户使用dir(errno) 指令时,可以得到所有错误代码的系统符号。
在这里插入图片描述
使用os模块strerror()函数,可以将错误代码转换成该错误代码的说明字符串。例如错误代码error.E2BIG的说明字符串是’Arg list too long‘。
在这里插入图片描述
在这里插入图片描述

这篇关于Python bug终结者:常见错误+异常处理+程序调试+错误代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/739632

相关文章

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,