python异常处理、模块的使用、__all__的调用、模块的发布和安装

来源:互联网 发布:人工智能毁灭人类电影 编辑:程序博客网 时间:2024/05/22 04:55

异常处理

#encoding=utf-8#异常处理try:print(33/ 0)open("cc.v")print("处理异常的情况")except (NameError,FileNotFoundError):#这里注意一点,在python3中,错误不能用.连接,需要()表示成元组print("名字有错误,出现异常")except Exception as ret:#查看异常的类型,异常的具体情况print('捕获上面异常没有捕获到的')print(ret)else:print("没有异常才会执行的功能")finally:print("是否出现异常都会执行")import timetry:f=open('D:\\vivien.tang\\桌面\\614问题总结.docx')try:while True:content=f.readline()if len(content)==0:breaktime.sleep(2)#这里用来延迟时间print(content)except:print("file")passfinally:f.close()print("关闭文件")except:print("没有这个文件")#异常的传递:像函数一样可以嵌套,嵌套过去的出现异常,如果函数本身没有try,则会反应到调用的函数上面#抛出自定义异常class ExceptionCreat(Exception):#其中exception是所有异常的父类'''自定义的异常类'''def __init__(self):print("自定义的类")def main():try:print()raise ExceptionCreat()#raise引发一个自定义的异常,其实自定义了一个类except ExceptionCreat as result:#前面是类创建的对象print("出现这个异常为%s"%result)#result是一个变量,指向自定义的exception对象的引用else:print("什么都没有发生")class test(object):def __init__(self,switch):self.switch=switchdef calc(self,a,b):try:return a/bexcept Exception as result:if self.switch:print("捕获开启,信息如下:")print(result)else:raise #异常正常的抛出去a=test(True)a.calc(11,0)'''捕获上面异常没有捕获到的division by zero是否出现异常都会执行file关闭文件捕获开启,信息如下:division by zero'''

#0表示假,非0表示真,1 -1 "a"#任何的None,[](空列表) {} ()(空元组) ""(空字符串) 0 import randomprint(random.randint(0,2))#在0到2之间产生一个随机数,0 1 2都有可能#.py就是一个模块#linux sudo pip install pygames pip是python中自带的安装工具,是管理python模块的一个工具#pip是管理python2的工具,pip3是管理python3的工具

#两种导入python模块的方式#import pygame #若没有提示错误,说明安装成功#import 模块的名称,不需要加.py#在调用模块时,会在调用模块中中间生成一个文件(.pyc 字节码),便于翻译运行#from 模块名 import 方法名#在调用的方法太多时,采用上面的方式效率低#from 模块名 import *#尽量少用import*#from send import *#from rece import *   //若两个文件中有相同的函数名,则后面的函数会将前面的替换掉,尽量少用* #import time as test #给模块起个别名,若模块名太长的话,可以用来替换print(__name__)#如果是在执行模块,而不是调用,则结果为__main__#若调用模块的话,结果为调用该模块的模块名#为了保证只在本模块测试的时候调用某些方法,则采用:#if __name__==="__main__"


__all__=[ ]的使用

#encoding=utf-8from learn_All import *test1()print(num)#若learn_All 模块中没有将全局变量放入到__all__=[]中时,则不能访问

#encoding=utf-8__all__=["test1","test2","num"]#列表里面存放当import all_learn from *,所导入进去的函数def test1():print("---test1---")def test2():print("---test2----")num=100 #这种全局变量也需要存放到__all__中才可以访问class Test(object):pass


#encoding=utf-8from learn_All import *test1()print(num)#若learn_All 模块中没有将全局变量放入到__all__=[]中时,则不能访问#若一个文件夹下面有很多模块,我们不能通过导入文件夹再导入模块的方式调用模块#需要在文件夹下添加模块__init__.py 来调用文件夹下的模块,整个文件夹称之为包#__init__.py的作用使文件夹称为一个包#为了使得包中的模块被调用,在__init__.py中进行修改:#__all__=["模块名"]#在import 文件夹名 时会执行__init__.py##在__init__.py中#__all__=["模块名"]   在导入文件夹后就可以调用模块#下面的方法适用于python2#import 模块名   可以这么使用:文件夹.模块名.函数名#python3中的使用#from . import 模块名##若文件夹中有__init__.py,则称之为包,将文件夹下的东西导入到__init__.py中import osos.__file__ #python解释器默认安装的模块的路径#将包放在系统路径上,每次调用时不需要考虑路径问题#在当前路径在新建一个setup.py#


#在__init__.py中输入:__all__=["learn_All","testHello"],调用下面的方法from packTest import  testHellotestHello.test()from packTest import learn_All#这种方法适用于python3learn_All.test1()#在__init__.py中输入:#from . import learn_All#from . import testHello #.表示当前路径#在python3中调用时可以采用这种方式:import packTestpackTest.learn_All.test1()#packTest.learn_All.test1()

cmd安装、发布

#encoding=utf-8#将文件安装到系统中去,任何路径下都可以直接访问#发布及安装#在与安装包同一路径下新建setup.py,其中的输入包相关的信息#python setup.py build#python setup.py sdist生成发布压缩包,在同一目录下生成dist,下面有个压缩包#cp dist/dollar-1.0.zip#python setup.py install#安装到系统默认的模块路径#import packTestfrom packTest import learn_All#这种方法适用于python3learn_All.test1()#packTest.learn_All.test1()

setup.py

#encoding=utf-8from distutils.core import setupsetup(name="dollar",version="1.0",description="setup",author="dollar",py_modules=["packTest.learn_All","packTest.testHello"])#后面存放要发布的模块名


#encoding=utf-8__all__=["test1","test2","num"]#列表里面存放当import all_learn from *,所导入进去的函数def test1():print("---test1---")def test2():print("---test2----")num=100 #这种全局变量也需要存放到__all__中才可以访问class Test(object):pass


#在__init__.py中输入:__all__=["learn_All","testHello"],调用下面的方法from packTest import  testHellotestHello.test()from packTest import learn_All#这种方法适用于python3learn_All.test1()#在__init__.py中输入:#from . import learn_All#from . import testHello #.表示当前路径#在python3中调用时可以采用这种方式:import packTestpackTest.learn_All.test1()#packTest.learn_All.test1()


#encoding=utf-8#将文件安装到系统中去,任何路径下都可以直接访问#发布及安装#在与安装包同一路径下新建setup.py,其中的输入包相关的信息#python setup.py build#python setup.py sdist生成发布压缩包,在同一目录下生成dist,下面有个压缩包#cp dist/dollar-1.0.zip#python setup.py install#安装到系统默认的模块路径#import packTestfrom packTest import learn_All#这种方法适用于python3learn_All.test1()#packTest.learn_All.test1()

这里有一点,若文件与要用到的文件都处在同一路径下,则可以调用包;若把包压缩封装好后,在别的路径调用时,则调用已封装好的包,若原来的文件发生改动,不会影响到此时的使用(现在用到的是已打包好的,固定的)