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实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1