模块:一个py文件
包的结构:
├── setup.py ├── suba │ ├── aa.py │ ├── bb.py │ └── __init__.py └── subb ├── cc.py ├── dd.py └── __init__.p from distutils.core import setup setup(name="xj", version="1.0", description="jj's module", author="xj", py_modules=['suba.aa', 'suba.bb', 'subb.cc', 'subb.dd'])即,setup.py里面一般写的是这个包的一些信息。 from…import:Python的from语句让你从模块中导入一个指定的部分到当前命名空间中 from … import *:把一个模块的所有内容全都导入到当前的命名空间也是可行的,这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。 from time import sleep as sp sleep(1)=>NameError: name 'sleep' is not defined sp(1)运行成功。 <6>定位模块 当你导入一个模块,Python解析器对模块位置的搜索顺序是: 1.当前目录 2.如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。 3.如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/ 4.模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。 import xxx as xxxx时别名应使用大驼峰 如果两个模块,存在同名的函数,那么后导入模块的函数,会覆盖掉先导入的函数,开发时,import应该写在最上面,这种情况下应该用as给工具起别名
===========================================================================
try: print('-----test--1---') open('123.txt','r') print('-----test--2---') except IOError: pass把可能出现问题的代码,放在try中把处理异常的代码,放在except中 当捕获多个异常时,可以把要捕获的异常的名字,放到except 后,并使用元组的方式仅进行存储。except (IOError,NameError): try: print('-----test--1---') open('123.txt','r') print('-----test--2---') except Exception as ret: print('捕获到了异常%s'%ret) 在try...except...中如果没有捕获到异常,那么就执行else中的事情 try: num = 100 print num except NameError as errorMsg: print('产生错误了:%s'%errorMsg) else: print('没有捕获到异常,真高兴') try....except....finally...语句用来表达这样的情况: 在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等.在程序退出之前,finally从句仍然被执行,把文件关闭。 如果try嵌套,那么如果里面的try没有捕获到这个异常,那么外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递。。。 如果一个异常是在一个函数中产生的,例如函数A---->函数B---->函数C,而异常是在函数C中产生的,那么如果函数C中没有对这个异常进行处理,那么这个异常会传递到函数B中,如果函数B有异常处理那么就会按照函数B的处理方式进行执行;如果函数B也没有异常处理,那么这个异常会继续传递,以此类推。。。如果所有的函数都没有处理,那么此时就会进行异常的默认处理,即通常见到的那样 try except except else finally : else:只有在没有异常时才会执行的代码finally:无论是否有异常都会执行的代码
raise:自定义一个异常
你可以用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类
class ShortInputException(Exception): '''自定义的异常类''' def __init__(self, length, atleast): #super().__init__() self.length = length self.atleast = atleast def main(): try: s = input('请输入 --> ') if len(s) < 3: # raise引发一个你定义的异常 raise ShortInputException(len(s), 3) except ShortInputException as result:#x这个变量被绑定到了错误的实例 print('ShortInputException: 输入的长度是 %d,长度至少应是 %d'% (result.length, result.atleast)) else: print('没有异常发生.') main()还可以在异常处理中抛出一个异常:
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) print("----------------------华丽的分割线----------------") a.switch = False a.calc(11,0)