文章目录
标准库
其实标准库就是模块化的函数
-
import sys
sys模块,它里面提供了一些变量和函数,使我们可以获取到Python解析器的信息
或者通过函数来操作Python解析器
引入sys模块 -
sys.argv
argv返回的是一个元素列表–可以存放数据 -
sys.modules
print(sys.modules)
返回的是一个字典 key-value
通过modules产生的结果将字典没有格式化操作
Python如何格式化模块?
pprint 模块它给我们提供了一个方法 pprint() 该方法可以用来对打印的数据做简单的格式化
-
import pprint
包或者模块
pprint.pprint(sys.modules) -
sys.path
他是一个列表,列表中保存的是模块的搜索路径 -
sys.platform
表示当前Python运行的平台
print(sys.platform) -
sys.exit()
1.表示的是将程序安全退出,不会将数据泄露
2.直接终止当前运行程序,将Python解释器直接终止 -
os.environ
通过这个属性可以获取到系统的环境变量
pprint.pprint(os.environ)
pprint.pprint(os.environ[‘path’])
异常
- 什么是异常?
- 程序底层或者程序执行时出现错误
- 使用没有被赋值的变量
- 使用不存在的索引
- 被0除
- 什么是error?
- 代码写错,不能编译
- error只能靠程序员自己修改代码
- 异常的特性?
- 当程序遇到异常代码体时,程序会中断当前执行操作
- 如何处理异常?
1.Java语言:try{}catch(){}
2,Python语言:
print('异常出现前')
l = []
try:
# print(c)
# l[10]
# 1 + 'hello'
print(10/0)
except NameError:
# 如果except后不跟任何的内容,则此时它会捕获到所有的异常
# 如果在except后跟着一个异常的类型,那么此时它只会捕获该类型的异常
print('出现 NameError 异常')
except ZeroDivisionError:
print('出现 ZeroDivisionError 异常')
except IndexError:
print('出现 IndexError 异常')
# Exception 是所有异常类的父类,所以如果except后跟的是Exception,他也会捕获到所有的异常
# 可以在异常类后边跟着一个 as xx 此时xx就是异常对象
except Exception as e :
print('未知异常',e,type(e))
#else---等价于finally
finally :
print('无论是否出现异常,该子句都会执行')
print('异常出现后')
如果函数调用处处理了异常,则不再传播,如果没有处理则继续向前传播
抛出异常
也可以自定义异常类,只需要创建一个类继承Exception即可
在Java和Python里面尽量不要使用自定义异常
备注:自定义异常使用场景:实际项目里面没有工具包,或者项目底层封装的源代码----需要自定义异常
问: throw和throws的区别是什么?
答: throws应用于动态方法后面,表示抛出方法里面的异常信息
throw表示一张异常行为,可以操作自定义异常–raise
class MyError(Exception):
pass
def add(a,b):
# 如果a和b中有负数,就向调用处抛出异常
if a < 0 or b < 0:
# raise用于向外部抛出异常,后边可以跟一个异常类,或异常类的实例
# raise Exception
# 抛出异常的目的,告诉调用者这里调用时出现问题,希望你自己处理一下
# raise Exception('两个参数中不能有负数!')
raise MyError('自定义的异常')
# 也可以通过if else来代替异常的处理
# return None
r = a + b
return r
print(add(-123,456))
包 (package)
包也是一个模块,当我们模块中代码过多时,或者一个模块需要被分解为多个模块时,这时就需要使用到包
普通的模块就是一个py文件,而包是一个文件夹,包中必须要一个一个 init.py 这个文件,这个文件中可以包含有包中的主要内容
import hello
print(hello.a)
print(hello.b)
print(hello.test)
# -*-coding:UTF-8 -*- __init__.py
a=10
b=20
def test():
print('这是test')
#备注:可以在hrllo文件下面/包定义 a.py b.py
from hello import a , b
print(a.c)
print(b.d)
# __pycache__ 是模块的缓存文件
# py代码在执行前,需要被解析器先转换为机器码,然后再执行
# 所以我们在使用模块(包)时,也需要将模块的代码先转换为机器码然后再交由计算机执行
# 而为了提高程序运行的性能,python会在编译过一次以后,将代码保存到一个缓存文件中
# 这样在下次加载这个模块(包)时,就可以不再重新编译而是直接加载缓存中编译好的代码即可