06_python_错误异常处理、模块

错误异常处理

print(1/0print('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):
	tryreturn a/b
	except Exception as error:
		print(error)
	finally:
		print(‘finally is go on 。。。’)

print(add3,4))

所以运行的优先级,finally的优先级比return高

——————————————————————————————————————

def add(a,b):
	tryreturn a/b
	except Exception as error:
		print(error)
	finally:
		print(‘finally is go on 。。。’)

add(1,0)

错误处理不要滥用

try:
	dict01 = {1:2,223: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,状态码,资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值