yiruia的个人博客分享 http://blog.sciencenet.cn/u/yiruia

博文

Day21 模块的导入和异常处理

已有 957 次阅读 2020-3-19 10:53 |系统分类:科研笔记

一、模块的导入

import

先从sys.modules里查看模块是否已被导入,如果没有导入就依据sys.path路径寻找模块,找到模块后就导入,并创建这个模块的命名空间,把文件中的名字都存储在命名空间中。

import as

有重命名的功效,重命名后只有重新命名的模块可用,之前的模块就不能使用了。

使用场景:

当应用操作类似时的两个模块时,如oracle和mysql,对数据库进行操作时,对这两个数据库的操作类似,如连接数据库、登录认证、增删改查、关闭数据库。

import oracle as db

import mysql as db

from ... import ...


单独从模块中导入某些方法,from time import sleep

而from ... import  *导入一个模块中的所有方法的做法不太安全。

总结

  • 所有模块导入都应该尽量写在程序的顶部

  • 书写导入模块的顺序应尽量遵循内置模块、扩展模块、自定义模块

  • sys.modles使模块不会被重复导入

  • sys.path表明从哪里导入模块


  • import 模块名

    模块名、变量名与本文件中的变量名完全不冲突

  • import 模块名 as 重命名的模块名

    提高代码的兼容性

  • from 模块名 import 变量名

    直接使用变量名就可以完成操作

    如果本文件中有相同的变量名会发生冲突

  • from 模块名 import 变量名 as 重命名的变量名

  • from 模块名 import 变量名1,变量名2

  • from 模块名 import *

    将模块中的所有变量名都放到内存中

    如果本文件中有相同文件名就会发生冲突

  • from 模块名 import * 和__all__是一对

    如果没有这个变量名就会导入所有的名字,如果有all只导入all列表中的名字

  • 在不会使用米快时可以看模块的源码

二、包

一大推模块的集合,把解决一类问题的模块放在一个文件夹里——包

关于包的注意事项:

  1. 关于包的导入语句分为import和from...import..两种,但无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带一连串的点,如item.subitem.subsubitem,但是必须遵循这个原则。

  2. 导入后,在使用时就没有这种限制了,点的左边可以是包、模块、函数、类(它们都是用点的方式调用自己的属性)

  3. from ... import ...需要注意的是from后import导入的模块,必须是明确的,不能带点,否则会有语法错误,如from a import b.c是错误的。模块导入相当于执行了.py文件,而导入一个包,默认执行包里面的__init__文件。对比import item和from item import name的应用场景:如果我们向直接使用name那比如使用后者。



__name__

在模块中有一个变量__name__,当我们直接执行这个模块的时候,__name__='__main__',当我们执行其他模块中引用的这个模块的时候,这个模块中的__name__='模块的名字'。

import demo
__all__ = ['read', 'read2']
money = 100
def login():
    print('正在执行登录程序')
def read():
    print('in read1', money)
def read2():
    print('in read2')

if __name__ = '__main__':
    ret = login()
    print(ret)

作业要求:

作业要有完整的目录结构
bin 程序入口
    start.py  开始文件\程序入口
        if __name__=='__main__':
            core.main() # 在bin目录下放start.py,一执行就都跑起来了
core #核心代码
    core.py
        shopping()
        pay()
        main()
conf 配置文件,给运维人员看的,给操作这个代码的人看的
db 放数据,数据库
lib 放自己写的包\模块,不是python解释器中的模块
log 代码运行时的执行过程

三、异常处理

什么是异常

1、语法错误:这种错误根本过不了python解释器的于法检测,必须在程序执行前就改正

2、逻辑错误:如1/0,name 未命名,2+‘3’,[][3]超出索引范围

try:
    ret = int(input('number>>>'))
    print(ret*'*')
except ValueError:
    print('您输入的内容有误,请重新输入一个数字')
except IndexError:
    print('超出列表的最大长度,请重新输入一个数字')

程序一旦发生错误,就从错误的位置停下来,不再执行后面的内容。

try:
    print(111)
    1/0
    print(222)
    name
    [][3]
    ret = int(input('number>>>'))
    print(ret*'*')
except ValueError:
    print('您输入的数据类型有误,请重新输入一个数字')
except Exception as error: #万能异常
    print('你错了,老铁,error')
else:
    print('---------') #没有异常的时候执行else代码
finally:
    print('+++++') # 不管代码是否异常,都会执行

使用try和except就能处理异常

    try是我们需要处理的代码

    except后面跟一个错误类型,当代码发生错误且错误类型符合的时候,就会执行except中的代码

    except支持多分支

    Exception能处理所有错误类型

        有了万能的处理机制,仍然需要把预测到的问题单独处理

        单独处理的所有内容都应写在万能异常之前

    没有异常的时候执行else带啊

    finally不管代码是否异常,都会执行

        finally和return相遇的时候,依然会执行

        函数里做异常处理用,不管是否异常去做一些首位工作,比如打开数据库后需要关闭。



https://blog.sciencenet.cn/blog-3405644-1224246.html

上一篇:Day20 常用模块
下一篇:Day 22 面向对象
收藏 IP: 223.91.42.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-20 01:55

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部