一、异常处理
1、错误与异常
错误分为语法错误和逻辑错误。
异常是程序运行时发生错误的信号。在python中,错误触发的异常如下:
2、常见异常种类
在python中,不同异常可以用不同的类型去标识。不同的类对象标识不同的异常,一个异常标识一种错误。
AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError 语法错误
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
3、基本语法
异常是由程序的错误触发的。为了不让程序遇到错误,产生崩溃。需要做异常处理。
# try:
# 被检测的代码块
# except 异常类型:
# try中一旦检测到异常,就执行这个位置的逻辑
例:
try:
age = input(">>>")
age = int(age)
except ValueError as va:
print(va)
'''
>>>a
invalid literal for int() with base 10: 'a'
'''
4、多分支
因为一个异常类只能处理一种特定的异常,所以可以用多分支解决该问题。
try:
age = input(">>>")
age = int(age)
except KeyError as va: # 相当于if多分支语句中的elif
print(va)
except ValueError as va: # 相当于if多分支语句中的elif
print(va)
except Exception as va: # 相当于if多分支语句中的else
print(va)
5、异常的其他结构
s1 = input(">>")
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
except Exception as e:
print(e)
else:
print('try内代码块没有异常则执行我')
finally:
print('无论异常与否,都会执行该模块')
6、主动触发异常
try:
raise TypeError("类型错误!")
except Exception as ex:
print(ex)
'''
类型错误!
'''
7、自定义异常
class CExc(BaseException):
def __init__(self,msg):
self.msg = msg
# raise CExc("错误!")
print(CExc("错误!")) # 错误!
8、断言
print('=================')
assert 1 == 2
print('------------------')
注:assert语句错误,会触发异常AssertionError,后续代码不再执行。
二、软件目录结构规范
规范化能更好的控制程序结构,让程序具有更高的可读性、可维护性。
目录结构实例如下:假如项目名称为dataman
dataman/
|----bin
| |----start.py(启动模块)
|----conf(配置文件目录)
| |----settings.py
|----db(数据库目录)
| |----admin
| |----school
| |----student
| |----teacher
|----lib(公共类库目录)
| |----commons.py
|----log(日志目录)
|----core(主程序目录)
|----README(程序说明书)