创建目录代码

1. 无论是 import 形式还是 from...import 形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法
2. 包是目录级的(文件夹级),文件夹是用来组成py文件(包的本质就是一个包含__init__.py文件的目录)
3. import 导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的 __init__.py ,导入包本质就是在导入该文件
强调:
  1. 在python3中,即使包下没有 __init__.py 文件,import 包仍然不会报错,而在 python2 中,包下一定要有该文件,否则 import 包报错
  2. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包即模块
注意:
1. 关于包相关的导入语句也分为 import 和 from ... import ... 两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如 item.subitem.subsubitem,但都必须遵循这个原则
2. 对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)

如下建立的包

import os
os.makedirs('E:/py/bao/api')
os.makedirs('E:/py/bao/cmd')
os.makedirs('E:/py/bao/db')
l = []
l.append(open('E:/py/bao/__init__.py','w'))
l.append(open('E:/py/bao/api/__init__.py','w'))
l.append(open('E:/py/bao/api/policy.py','w'))
l.append(open('E:/py/bao/api/versions.py','w'))
l.append(open('E:/py/bao/cmd/__init__.py','w'))
l.append(open('E:/py/bao/cmd/manage.py','w'))
l.append(open('E:/py/bao/db/models.py','w'))
l.append(open('E:/py/bao/db/__init__.py','w'))
map(lambda f:f.close() ,l)

如下的一个目录结构

glance/                   

├── __init__.py     from .api import *
from .cmd import *
from .db import *
├── api │ ├── __init__.py __all__ = ['policy','versions'] │ ├── policy.py │ └── versions.py ├── cmd __all__ = ['manage'] │ ├── __init__.py │ └── manage.py └── db __all__ = ['models'] ├── __init__.py └── models.py import glance
policy.get()

接下来我们来尝试调用模块

import bao.api.policy as policy
policy.get() from bao.api import policy #import 后面不能带“.”什么
policy.get() import sys
print(sys.path) #查看配置路径 ##我们尝试 import 包,然后使用其下面的方法
#原因是:当导入一个包时,一定执行包下面的 __init__.py 文件,此时我们改文件为空
import bao
bao.api.policy.get() #报错 AttributeError: module 'bao' has no attribute 'api' #然后我们要做的就是在没一级包中的 __init__.py 中导入要用到的下一级的包,需要注意的是 sys.path 的路径

我们在 __init__.py 中导入包时

from bao.api import policy #绝对路径
from . import policy #相对路径

绝对路径:
  使用绝对路径 不管在包内部还是外部 导入了就能用
  不能挪动,但是直观
相对路径:(当使用一个成熟的包时使用)
  可以随意移动包 只要能找到包的位置,就可以使用包里的模块
  包里的模块如果想使用其它模块的内容只能使用相对路径,使用了相对路径就不能在包内直接执行了

## __all__ 与 from ... import * 配合的导入方式
#可以忽略中间一层的文件名

异常处理

先来看一串代码,后面在慢慢解释

try:
print('')
# 1/0
print('')
# name
# 2+'3'
# [][3]
# {}['k']
ret = int(input('number >>>'))
print(ret*'*')
except ValueError:
print('输入的数据类型有误')
except Exception:
print('你错了,老铁')
else:
print('没有异常的时候执行else中的代码')
print('===========') def func():
try:
f = open('file','w')
return True
except:
return False
finally:
print('执行 finally 了')
f.close()
print(func())

程序一旦发生错误,就从错误的位置停下来了,不在继续执行后面的内容
使用 try 和 except 就能处理异常
  try 是我们需要处理的代码
  except 后面跟一个错误类型 当代码发生错误且错误类型符合的时候 就会执行 except 中的代码
  except 支持多分支
  有没有一个能处理所有错误的类型:Exception
    有了万能的处理机制仍然需要把能预测到的问题单独处理
    单独处理的所有内容都应该写在万能异常之前
  else:没有异常的时候执行 else 中的代码
  finally:不管代码是否异常,都会执行
    finally 和 return 相遇的时候 依然会执行
    函数里做异常处理用,不管是否异常去做一些收尾工作

在 Exception 后加上 error

try:
print('')
# 1/0
print('')
# name
# 2+'3'
# [][3]
# {}['k']
ret = int(input('number >>>'))
print(ret*'*')
except Exception as error: #在使用万能异常处理时,加上 error 可以显示报错信息
print('你错了,老铁',error)

day 21 - 1 包,异常处理的更多相关文章

  1. Python进阶-XIII 导入模块和包 异常处理

    一.模块的导入 1).import # 测试一:money与my_module.money不冲突 import my_module money=10 print(my_module.money) '' ...

  2. Android(java)学习笔记21:Java异常处理机制

    1. try....catch  /  try...catch...finally package cn.itcast_02; /* * 我们自己如何处理异常呢? * A:try...catch... ...

  3. python 09 数据包 异常处理

    pickle模块操作文件 pickle.dump(obj, file[, protocol]) 序列化对象,并将结果数据流写入到文件对象中.参数protocol是序列化模式,默认值为0,表示以文本的形 ...

  4. SpringBoot集成<个推推送> Maven 下载jar包异常处理本地打包下载

    问题描述 公司需要对用户进行消息推送,选择了个推,由于是Java进行开发,个推操作文档, 这是官网上安装的方式,可是不成功,无论怎么样都无法把Jar包下载下来! MAVEN方式(本人测试Jar无法下载 ...

  5. Centos7.4 安装MySQL 5.7.21 (通用二进制包)

    1.下载安装包 MySQL 官方下载地址:https://dev.mysql.com/downloads/mysql/ MySQL 5.7官方安装文档:https://dev.mysql.com/do ...

  6. node包管理器

    NPM小结   nodejs的出现,可以算是前端里程碑式的一个事件,它让前端攻城狮们摆脱了浏览器的束缚,踏上了一个更加宽广的舞台.前端的可能性,从此更加具有想象空间. 随着一系列基于nodes的应用/ ...

  7. python3 模块和包

    一.模块(Module)和包(Package) 1.模块:一个包含所有你定义的函数和变量的文件,其后缀名是 .py ,一个.py文件就是一个模块 2.包:一定包含 __init__.py模块 的文件夹 ...

  8. rpm 程序包管理介绍

    API:application program interface ABI:application binary interface linux系统的ABI文件是ELF格式的 windows系统的AB ...

  9. 【OCP、OCM、高可用等】小麦苗课堂网络班招生简章(从入门到专家)--课程大纲

    [OCP.OCM.高可用等]小麦苗课堂网络班招生简章(从入门到专家)--课程大纲 小麦苗信息 我的个人信息 网名:小麦苗 QQ:646634621 QQ群:618766405 我的博客:http:// ...

随机推荐

  1. 影响Linux发展的四位天才黑客

    影响Linux发展的四位天才黑客 相信大家对 Linux 再熟悉不过了.我们都知道 Linux继承自 Unix,但其实他们上一代还有一个 Multics.从最早的 Multics 发展到最早版本的 L ...

  2. Chinese Mahjong UVA - 11210 (暴力+回溯递归)

    思路:得到输入得到mj[]的各个牌的数量,还差最后一张牌.直接暴力枚举34张牌就可以了. 当假设得到最后一张牌,则得到了的牌看看是不是可以胡,如果可以胡的话,就假设正确.否者假设下一张牌. 关键还是如 ...

  3. Vue插值文本换行问题

    问题背景: 后端返回的字符串带有\n换行符,但Vue将其插值渲染成div内部文本后,文本并不换行,换行符显示为一个空格. 目标: 让文本在换行符处换行. 解决方法: 思路:实现文本换行有两种方法,一是 ...

  4. Educational Codeforces Round 61 (Rated for Div. 2)-C. Painting the Fence 前缀和优化

    题意就是给出多个区间,要求去掉两个区间,使得剩下的区间覆盖范围最大. 当然比赛的时候还是没能做出来,不得不佩服大佬的各种姿势. 当时我想的是用线段树维护区间和,然后用单点判0,维护区间间断个数.然后打 ...

  5. KVM宿主机上虚拟机动态添加新磁盘

    (1)KVM宿主机查看运行的虚拟机 $ virsh list --all (2)将qcow2的磁盘移动到/var/lib/libvirt/images/,比如为centos.qcow2 (3)进入/e ...

  6. CSS 实现自动换行、强制换行、强制不换行的属性

    实现效果 1.自动换行: word-wrap:break-word; word-break:normal; 2.强制换行: word-break:break-all;       按字符截断换行 /* ...

  7. [HNOI2001] 产品加工

    题目类型:\(DP\) 传送门:>Here< 题意:有\(N\)个零件,每个零件有三种选择,在\(A\)机器加工,在\(B\)机器加工,同时在\(AB\)加工.其中所需要的时间分别为\(t ...

  8. DRF 商城项目 - 用户操作(收藏, 留言, 收货地址)

    个人收藏 整体逻辑类似于 个人中心 ( 个人中心的相关逻辑梳理详情  点击这里 ) 也是两个序列化组价的分流 查看收藏  ( list ) 详情指向 收藏详情 的组价 创建收藏 ( create ) ...

  9. 互联网+ 何人能挡?带着你的Code飞奔吧!

    Python方向: 早期方向 Web全栈 擅长专栏 爬虫系列 数据分析 人工智能 物联网系(lot万物互联)[逆天很看好未来的前景] 自动化运维(安全与测试) 其他系列 游戏开发(最近很火) 导航栏: ...

  10. Java 8 特性 —— Stream

    Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8 中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找.遍历.过滤以及 ...