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实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所