包导入问题:
包之外导入:还是按照sys.path的搜索路径进行模块的导入
包内的导入:python3.0+ 完全区分绝对导入和相对导入
from . import string #在本包内按相对路径搜索string模块
import string #按sys.path的绝对路径搜索string模块,忽略包中的模块,即使包中存在该模块
python2.7 from . import string #与3.0一致,按相对路径搜索string模块
import string #若包中有string模块,优先导入该模块,否则,搜索sys.path目录下的模块
数据隐藏问题:
使用from *时,python 默认导入保存在'__all__'属性中的那些变量名;
若无'__all__'属性,则默认导入所有不是'_x'这种形式的变量名。
模块导入与运行问题:
当模块运行时,默认的__name__=='__main__'
而当模块导入时,__name__==模块名
由此可以将模块用于不同用途的代码分隔开。
try-except-else-finally:
try:
expression
except SomeException as e:
deal with the exception
产生异常时,会用异常产生的参数生成一个该异常类的实例, 即e。 若无异常,则参数都为None。
python中的异常类:
有3 个直接从BaseException 派生的异常子类:SystemExit,KeyboardInterrupt 和Exception.
其他的所有的内建异常都是Exception 的子类
上下文管理协议:
with context_expr [as var]: with_suite
python中的上下文管理对象:
file
decimal.Context
thread.LockType
threading.Lock
threading.RLock
threading.Condition
threading.Semaphore
threading.BoundedSemaphore
自定义上下文对象(contextlib 模块):
__context__() 上下文管理器调用该方法产生一个上下文对象, 有点需要注意的是上下文对象本身就可以是上下文管理器。
为管理器时,返回一个上下文对象,为上下文对象时, 返回自身(自我管理)。
__enter()__ as 后以__enter__返回值来赋值,否则,丢弃返回值
__exit()__ with 语句块执行结束,无论异常与否,都会执行该方法。
三个参数.若正常结束,三个参数全部是None.若异常,三个参数的值的分别等于调用sys.exc_info()函数返回的三个值:
类型(异常类),值(异常实例),和回溯(traceback),相应的回溯对象.
惯例是当你处理完异常时不返回任何值,或返回None,或返回其他布尔值为False 对象,这样可以使异常抛给你的用户来处理.
如果你明确的想屏蔽这个异常,返回一个布尔为True 的值.如果没有发生异常或你在处理异常后返回True,程序会继续执行with 子句后的下
一段代码.