[19/10/16-星期三] Python中的模块和包、异常、操做文件

1、模块python

# 模块(module)
# 模块化,模块化指将一个完整的程序分解为一个一个小的模块
#   经过将模块组合,来搭建出一个完整的程序
# 不采用模块化,统一将全部的代码编写到一个文件中
# 采用模块化,将程序分别编写到多个文件中
#   模块化的有点:
#       ① 方便开发
#       ② 方便维护
#       ③ 模块能够复用!

# 在Python中一个py文件就是一个模块,要想建立模块,实际上就是建立一个python文件
# 注意:模块名要符号标识符的规范

# 在一个模块中引入外部模块
# ① import 模块名 (模块名,就是python文件的名字,注意不要后边的.py)
# ② import 模块名 as 模块别名
#   - 能够引入同一个模块屡次,可是模块的实例只会建立一个
#   - import能够在程序的任意位置调用,可是通常状况下,import语句都会统一写在程序的开头
#   - 在每个模块内部都有一个__name__属性,经过这个属性能够获取到模块的名字
#   - __name__属性值为 __main__的模块是主模块,一个程序中只会有一个主模块
#       主模块就是咱们直接经过 python 执行的模块
import test_module as test

# print(test.__name__)
print(__name__)

测试缓存

# 能够在模块中定义变量,在模块中定义的变量,在引入模块后,就能够直接使用了
#m.py文件
a = 10 b = 20 # 添加了_的变量,只能在模块内部访问,在经过import * 引入时,不会引入_开头的变量 _c = 30 # 能够在模块中定义函数,一样能够经过模块访问到 def test(): print('test') def test2(): print('test2') # 也能够定义类 class Person: def __init__(self): self.name = '孙悟空' # 编写测试代码,这部分代码,只要当当前文件做为主模块的时候才须要执行 # 而当模块被其余模块引入时,不须要执行的,此时咱们就必需要检查当前模块是不是主模块 if __name__ == '__main__': test() test2() p = Person() print(p.name)
# import m

# # 访问模块中的变量:模块名.变量名
# # print(m.a , m.b)

# # m.test2()

# p = m.Person()

# print(p.name)

def test2():
    print('这是主模块中的test2')


# 也能够只引入模块中的部份内容
# 语法 from 模块名 import 变量,变量....
# from m import Person
# from m import test
# from m import Person,test #引入2个
# from m import * # 引入到模块中全部内容,通常不会使用
# p1 = Person()
# print(p1)
# test()
# test2()

# 也能够为引入的变量使用别名
# 语法:from 模块名 import 变量 as 别名
# from m import test2 as new_test2

# test2()
# new_test2()

from m import *
# print(_c)

# import xxx
# import xxx as yyy
# from xxx import yyy , zzz , fff
# from xxx import *
# from xxx import yyy as zz

less

# 包 Package
# 包也是一个模块
# 当咱们模块中代码过多时,或者一个模块须要被分解为多个模块时,这时就须要使用到包
# 普通的模块就是一个py文件,而包是一个文件夹
#   包中必需要一个一个 __init__.py 这个文件,这个文件中能够包含有包中的主要内容
from hello import a , b

print(a.c)
print(b.d)

# __pycache__ 是模块的缓存文件
# py代码在执行前,须要被解析器先转换为机器码,而后再执行
#   因此咱们在使用模块(包)时,也须要将模块的代码先转换为机器码而后再交由计算机执行
#   而为了提升程序运行的性能,python会在编译过一次之后,将代码保存到一个缓存文件中
#   这样在下次加载这个模块(包)时,就能够再也不从新编译而是直接加载缓存中编译好的代码便可

2、标准库模块化

# 开箱即用
# 为了实现开箱即用的思想,Python中为咱们提供了一个模块的标准库
# 在这个标准库中,有不少很强大的模块咱们能够直接使用,
#   而且标准库会随Python的安装一同安装
# sys模块,它里面提供了一些变量和函数,使咱们能够获取到Python解析器的信息
#   或者经过函数来操做Python解析器
# 引入sys模块
import sys

# pprint 模块它给咱们提供了一个方法 pprint() 该方法能够用来对打印的数据作简单的格式化
import pprint

# sys.argv
# 获取执行代码时,命令行中所包含的参数
# 该属性是一个列表,列表中保存了当前命令的全部参数
# print(sys.argv)

# sys.modules
# 获取当前程序中引入的全部模块
# modules是一个字典,字典的key是模块的名字,字典的value是模块对象
# pprint.pprint(sys.modules)

# sys.path
# 他是一个列表,列表中保存的是模块的搜索路径
# ['C:\\Users\\lilichao\\Desktop\\resource\\course\\lesson_06\\code',
# 'C:\\dev\\python\\python36\\python36.zip',
# 'C:\\dev\\python\\python36\\DLLs',
# 'C:\\dev\\python\\python36\\lib',
# 'C:\\dev\\python\\python36',
# 'C:\\dev\\python\\python36\\lib\\site-packages']
# pprint.pprint(sys.path)

# sys.platform
# 表示当前Python运行的平台
# print(sys.platform)

# sys.exit()
# 函数用来退出程序
# sys.exit('程序出现异常,结束!')
# print('hello')

# os 模块让咱们能够对操做系统进行访问
import os

# os.environ
# 经过这个属性能够获取到系统的环境变量
# pprint.pprint(os.environ['path'])

# os.system()
# 能够用来执行操做系统的名字
# os.system('dir')
os.system('notepad')

3、异常函数

# 第七章 异常和文件

## 异常
    程序在运行过程中,不可避免的会出现一些错误,好比:
        使用了没有赋值过的变量
        使用了不存在的索引
        除0
        ...
    这些错误在程序中,咱们称其为异常。
    程序运行过程当中,一旦出现异常将会致使程序当即终止,异常之后的代码所有都不会执行!    

## 处理异常
    程序运行时出现异常,目的并非让咱们的程序直接终止!
    Python是但愿在出现异常时,咱们能够编写代码来对异常进行处理!    

    try语句
        try:
            代码块(可能出现错误的语句)
        except 异常类型 as 异常名:
            代码块(出现错误之后的处理方式)
        except 异常类型 as 异常名:
            代码块(出现错误之后的处理方式)
        except 异常类型 as 异常名:
            代码块(出现错误之后的处理方式)
        else:
            代码块(没出错时要执行的语句)    
        finally:
            代码块(该代码块总会执行)    

        try是必须的 else语句有没有都行
        except和finally至少有一个    

    能够将可能出错的代码放入到try语句,这样若是代码没有错误,则会正常执行,
        若是出现错误,则会执行expect子句中的代码,这样咱们就能够经过代码来处理异常
        避免由于一个异常致使整个程序的终止            

## 异常的传播(抛出异常)
    当在函数中出现异常时,若是在函数中对异常进行了处理,则异常不会再继续传播,
        若是函数中没有对异常进行处理,则异常会继续向函数调用处传播,
        若是函数调用到处理了异常,则再也不传播,若是没有处理则继续向调用处传播
        直到传递到全局做用域(主模块)若是依然没有处理,则程序终止,而且显示异常信息

    当程序运行过程当中出现异常之后,全部的异常信息会被保存一个专门的异常对象中,
        而异常传播时,实际上就是异常对象抛给了调用处
        好比 : ZeroDivisionError类的对象专门用来表示除0的异常
                NameError类的对象专门用来处理变量错误的异常
                ....

    在Python为咱们提供了多个异常对象            

## 抛出异常
    - 可使用 raise 语句来抛出异常,
        raise语句后须要跟一个异常类 或 异常的实例

## 文件(File)
    - 经过Python程序来对计算机中的各类文件进行增删改查的操做
    - I/O(Input / Output)
    - 操做文件的步骤:
        ① 打开文件
        ② 对文件进行各类操做(读、写),而后保存
        ③ 关闭文件

 

# print('hello')
# try:
#     # try中放置的是有可能出现错误的代码
#     print(10/0)
# except:
#     # except中放置的是出错之后的处理方式
#     print('哈哈哈,出错了~~~')
# else:
#     print('程序正常执行没有错误')    
# print('你好')


# print(10/0)


def fn():
    print('Hello fn')
    print(a)
    print(10/0)

def fn2():
    print('Hello fn2')
    fn()

def fn3():
    print('Hello fn3')
    fn2()

fn3()    
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))
finally :
    print('不管是否出现异常,该子句都会执行')

print('异常出现后')

自定义异常性能

# 也能够自定义异常类,只须要建立一个类继承Exception便可
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))    
相关文章
相关标签/搜索