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

时间:2022-06-15 23:59:02

异常处理

#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 time
try:
f=open('D:\\vivien.tang\\桌面\\614问题总结.docx')
try:
while True:
content=f.readline()
if len(content)==0:
break
time.sleep(2)#这里用来延迟时间
print(content)
except:
print("file")
pass
finally:
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=switch
def calc(self,a,b):
try:
return a/b
except 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 random
print(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-8
from 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-8
from 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 os
os.__file__ #python解释器默认安装的模块的路径

#将包放在系统路径上,每次调用时不需要考虑路径问题
#在当前路径在新建一个setup.py
#


#在__init__.py中输入:__all__=["learn_All","testHello"],调用下面的方法
from packTest import testHello
testHello.test()

from packTest import learn_All#这种方法适用于python3
learn_All.test1()


#在__init__.py中输入:
#from . import learn_All
#from . import testHello #.表示当前路径
#在python3中调用时可以采用这种方式:

import packTest
packTest.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 packTest
from packTest import learn_All#这种方法适用于python3
learn_All.test1()
#packTest.learn_All.test1()

setup.py

#encoding=utf-8
from distutils.core import setup

setup(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 testHello
testHello.test()

from packTest import learn_All#这种方法适用于python3
learn_All.test1()


#在__init__.py中输入:
#from . import learn_All
#from . import testHello #.表示当前路径
#在python3中调用时可以采用这种方式:

import packTest
packTest.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 packTest
from packTest import learn_All#这种方法适用于python3
learn_All.test1()
#packTest.learn_All.test1()

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