错误异常处理
print(1/0)
print('go on ....')
会有0值错误:ZeroDivisionError,程序会被中断
错误异常处理机制的形式
try:被捕获异常的代码 ——>
except:在except中处理try代码块中产生的异常 ——>
finally:
举例:
try:
print(1/0)
except ZeroDivisionError as error:
print(“ZeroDivisionError:在文件中的print(1/0)中,位置0不能作为除数!.{}”.format(error))
#可以自定义错误信息的输出
print('go on ....') #抛出异常,但程序没有中断仍然可以运行
————————————————————————————————
缺点:
try:
print(a+b)
except ZeroDivisionErroras error:
#(ZeroDivisionError,NameError)多个error的时候也可以使用元组的形式,
#但不推荐,局限性比较大,但用这种方法,也有缺点,只满足一个就不匹配了
print(“ZeroDivisionError:在文件中的print(1/0)中,位置0不能作为除数!.{}”.format(error))
#可以自定义错误信息的输出
except NameError as error:
print("NameError:在文件中不能存在print(未定义的变量).{}".format(error))
print('go on ....')
———————————————————————————————————————
try:
print(1/0) #执行体不能放函数
except Exception as error: #笼统的写法,用基类;Exception是捕捉非系统异常
print("Error:except's Exception info:{}".format(error))
print('go on ...')
———————————————————————————————————————
try:
print(1/0)
except: #捕捉系统异常、非系统异常,不推荐使用
print(‘system error’)
print(‘go on。。。’)
————————————————————————
def add(a,b):
try:
return a/b
except Exception as error:
print(error)
finally:
print(‘finally is go on 。。。’)
print(add(3,4))
所以运行的优先级,finally的优先级比return高
——————————————————————————————————————
def add(a,b):
try:
return a/b
except Exception as error:
print(error)
finally:
print(‘finally is go on 。。。’)
add(1,0)
错误处理不要滥用
try:
dict01 = {1:2,2:2,3:3}
except Exception as error:
print('字典声明错误')
finally:
print(‘end’)
对此,没有必要,像声明,算法,只能是语法错误。有可能出现错误异常的地方在加
模块
模块的定义:
1、模块是一个文件,该文件的表现形式以.py结尾
2、在模块文件中,所存在的内容是各个不同的函数;
包的定义:
1、包是一个目录,该目录中存有模块文件或子包(目录)
2、子包的定义:
子包也是一个目录,该目录中存在模块文件
包的表现形式:tree logAnalysis
优势:
可以引入
用法:
from 包.子包 import 模块(.py文件) .py文件里必须是函数或者类
从哪个子包(路径)中,导入那个模块
小例子:
init.py 空文件,初始化的作用
目录结构如下图:
子包ips里的ipAnalysis.py文件
def ipAnalysis(filepath):
ips = {}
with open(file=filepath, mode='r') as log:
for lines in log.readlines():
if not lines.split()[0] in ips.keys():
ips.setdefault(lines.split()[0], 1)
else:
ips[lines.split()[0]] += 1
return dict(sorted(ips.items(), key=lambda x: x[1], reverse=True))
main.py文件
from logAnalysis.ips import ipAnalysis
# # 从哪个子包(路径)中,导入哪个模块
ips = ipAnalysis.ipAnalysis('03day/access_log')
print(ips)
作业:
把分析日志的三个功能通过自定义模块的形式写出来,ips,状态码,资源