Python基础之(异常与开发规范)
一、异常
1.1、Python中错误分为两种:
- 语法错误,这种错误根本过不了python解释器的语法检测,必须在程序执行前就改正
- 逻辑错误,如int("m")
异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下:
python中异常的种类:
1 #常用异常 2 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 3 IOError 输入/输出异常;基本上是无法打开文件 4 ImportError 无法引入模块或包;基本上是路径问题或名称错误 5 IndentationError 语法错误(的子类) ;代码没有正确对齐 6 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] 7 KeyError 试图访问字典里不存在的键 8 KeyboardInterrupt Ctrl+C被按下 9 NameError 使用一个还未被赋予对象的变量 10 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) 11 TypeError 传入对象类型与要求的不符合 12 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量, 13 导致你以为正在访问它 14 ValueError 传入一个调用者不期望的值,即使值的类型是正确的 15 16 #更多异常 17 ArithmeticError 18 AssertionError 19 AttributeError 20 BaseException 21 BufferError 22 BytesWarning 23 DeprecationWarning 24 EnvironmentError 25 EOFError 26 Exception 27 FloatingPointError 28 FutureWarning 29 GeneratorExit 30 ImportError 31 ImportWarning 32 IndentationError 33 IndexError 34 IOError 35 KeyboardInterrupt 36 KeyError 37 LookupError 38 MemoryError 39 NameError 40 NotImplementedError 41 OSError 42 OverflowError 43 PendingDeprecationWarning 44 ReferenceError 45 RuntimeError 46 RuntimeWarning 47 StandardError 48 StopIteration 49 SyntaxError 50 SyntaxWarning 51 SystemError 52 SystemExit 53 TabError 54 TypeError 55 UnboundLocalError 56 UnicodeDecodeError 57 UnicodeEncodeError 58 UnicodeError 59 UnicodeTranslateError 60 UnicodeWarning 61 UserWarning 62 ValueError 63 Warning 64 ZeroDivisionError
1.2、异常处理
python解释器检测到错误,触发异常(也允许程序员自己触发异常)程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理
为什么需要异常处理?
python解析器去执行程序,当检测到了一个错误时就会触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,谁会去用一个运行着突然就崩溃的软件。所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性
怎样进行异常处理?
- 如果错误发生的条件是可预知的,我们需要用if进行处理:在错误发生之前进行预防
- 如果错误发生的条件是不可预知的,则需要用到try...except:在错误发生之后进行处理
#if m = input(":") if type(m) is int: print(m) elif len(m) == 0: print("xxx") else: print(len(m)) print("错误") #try...except #基本语法为: try: 被检测的代码块 except 异常类型: try中一旦检测到异常,就执行这个位置的逻辑 m = input(":") try: int(m) except Exception as e: print(e)
Ps:万能异常类:Exception
#主动触发异常raise try: raise TypeError('类型错误') except Exception as e: print(e)
二、软件开发规范
2.1、为什么需要规范软件开发
你现在包括之前写的一些程序,所谓的'项目',都是在一个py文件下完成的,代码量撑死也就几百行,你认为很好。但是真正的后端开发的项目,系统等,少则几万行代码,多则十几万,几十万行代码,你全都放在一个py文件中行么?这显然是不行的。我们需要有一个较好的规范才能保证在开发过程中不混乱或者叫杂乱无章。软件开发首先规范你的项目目录结构,代码规范,遵循PEP8规范等等,让你更加清晰、合理的开发。
2.2、设计项目目录结构
"设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题。对于这种风格上的规范,一直都存在两种态度:
- 一类程序员认为,这种个人风格问题"无关紧要"。理由是能让程序work就好,风格问题根本不是问题。
- 另一类认为,规范化能更好的控制程序结构,让程序具有更高的可读性
我是比较偏向于后者的,因为我是前一类程序员思想行为下的直接受害者。我曾经维护过一个非常不好读的项目,其实现的逻辑并不复杂,但是却耗费了我非常长的时间去理解它想表达的意思。从此我个人对于提高项目可读性、可维护性的要求就很高了。"项目目录结构"其实也是属于"可读性和可维护性"的范畴,我们设计一个层次清晰的目录结构,就是为了达到以下两点:
- 可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等。从而非常快速的了解这个项目。
- 可维护性高: 定义好组织规则后,维护者就能很明确地知道新增的文件和代码应该放在什么目录之下。这个好处是,随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好
较好的目录结构如下:
具体说明:
#bin 启动文件 #conf 配置文件 #core 主程序 #db 数据库 #lib 第三方库 #log 日志 #readme 软件定位,软件的基本功能代码目录结构说明,更详细点可以说明软件的基本原理 运行代码的方法: 安装环境、启动命令等 常见问题说明