美文网首页
Python语言基础11

Python语言基础11

作者: Cestine | 来源:发表于2018-11-28 02:52 被阅读0次

1.异常

<1>异常:

当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"

<2>捕获异常 try...except...

目的:

不让程序崩溃,然后出现问题给用户进行良好的提示,增加代码的稳健性

格式:

try:

    执行可能会发生异常的代码

excpet 异常类型:

  如果代码发生异常会进入这个语句中

说明:

  把可能出现问题的代码,放在try中

  把处理异常的代码,放在except中

扩展:

except可以单独处理某些自己关注的异常

<3> except捕获多个异常

使用一个except 可以捕获多个异常类型

try:

    执行可能会发生异常的代码

excpet (异常类型1, 异常类型2,...):

如果代码发生异常会执行这个语句

注意:

  当捕获多个异常时,可以把要捕获的异常的名字,放到except 后,并使用元组的方式仅进行存储

<4>获取异常的信息描述

try:

    执行可能会发生异常的代码

excpet 异常类型 as e(临时变量,保存异常的信息描述):

如果代码发生异常会执行这个语句

as e 可以获取异常对象,print(e)可以打印异常信息

print(type(e))可以查看异常的类型

<5>捕获所有异常

如果不需要保存异常信息描述就用上面的方法,如果需要保存异常描述就用下面的方法。

注意:

以后不确定异常类型,可以统一使用Exception去捕获,因为多数异常类型都是继承Exception

<6> else 和 try...finally...

  咱们应该对else并不陌生,在if中,它的作用是当条件不满足时执行的实行;同样在try...except...中也是如此,即如果没有捕获到异常,那么就执行else中的事情

  try...finally...语句用来表达这样的情况:在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等

格式:

try:

    执行可能会发生异常的代码

excpet 异常类型 as e: #as e 可以获取异常对象,print(e)可以打印异常信息

如果代码发生异常会执行这个语句

else:

如果程序没有异常会执行这个语句

finally: # finally语句必须放到异常捕获代码的最后面

有没有异常都会执行这个语句

<7>异常的传递

如果当期代码块没有捕获异常,那么异常信息会往上抛出,如果最外面也没有去捕获这个异常那么程序会崩溃,抛出这个异常

扩展:

异常传递的应用场景,如果里面的代码出现异常抛出信息打印显示不方便,我们可以在最外层进行捕获,然后进行处理

<8> 抛出自定义的异常

你可以用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类

raise不仅可以抛出自定义异常,还可以抛出系统的异常

<9> 异常处理中抛出异常

异常处理中抛出异常:就是使用except捕获住异常,然后不对异常进行处理,然后在抛出异常让外界进行处理这个异常。但是最外层一定要有try...except进行捕获处理,不然程序会报错。

2.判断语句(判断程序的入口)

if __name__ == '__main__':

    main()

如果在本模块内打印__name__输出__main__

如果在其他模块导入后打印__name__输出导入的模块名

如果自测 应该调用main函数 (__name__ = __main__)

如果被其他模块正常使用的时候 不允许调用 (__name__ == 模块名)

3.模块

模块(module),就是.py文件,就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块。

模块包括三大元素 全局变量 函数 类

模块的命名规则遵循标识符的命名规则,由字母、数字、下划线组成,不可以数字开头,并区分大小写

导入模块:

在一个模块导入另一个模块 会把这个模块中的内容都会执行一遍(也叫做扫描)

导入模块import

<1>import (全部导入)

导入格式: import 模块名

可以导入多个模块

导入格式: import 模块名1, 模块名2, 模块名3

调用格式:模块名.全局变量名 模块名.函数名 模块名.类名

<2>from…import (选择性导入)

导入格式: from 模块名 import 全局变量名, 函数名, 类名

调用格式:直接调用即

注意:

使用from导入指定功能代码,如果在当前模块提供相同的代码,那么会把导入模块的代码覆盖

<3>from … import * (全部导入 使用的时候不需要写模块名)

导入格式: from 模块名 import *

调用格式:直接调用即

<4> as 对全局变量名 函数名 类名 模块名 进行重命名

对全局变量名 函数名 类名 进行重命名

from 模块名 import 原全局变量名as 新全局变量名

对模块名 进行重命名

import 原模块名 as 新模块名

<5>定位模块

import sys

print(sys.path)

导入sys模块,使用sys.path查看模块导入的顺序,默认在当前目录下查找,如果找到了就直接使用

当你导入一个模块,Python解析器对模块位置的搜索顺序是:

  1. 当前目录

  2. 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。

  3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/

  4. 模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

<6>模块中的__all__

模块中的__all__ 是配合其他模块中导入模块格式(from 模块名 import *)使用

只有在__all__里面的字符串标识符才可以被导入使用

__all__ = ["name", "add2num", "Person"]

4.python中的包

变量 -> 函数 -> 类 -> 模块 -> 包

包的定义:

把不同模块(.py文件)放到文件夹里面进行管理就是一个包,但是要有一个前提是文件夹里面必须有一个__init__.py的文件

包的作用:

包是管理不同模块的

注意:

直接导入包名的时候,默认不可以使用包里面的模块,但是可以在__init__文件里面进行配置使用

从包里面导入指定模块:from 包名(当前包可以用.(点)代替) import 模块名

在包外面的模块中如何访问包内部模块中的元素 (全局变量 函数 类)

格式1:

import 包名.模块名

调用格式:

包名.模块名.全局变量 | 函数名 | 类名

格式2:

from 包名 import 模块名

调用格式:

模块名.全局变量 | 函数名 | 类名

格式3:

from 包名 import *

调用格式:

模块名.全局变量 | 函数名 | 类名

必须和包中的__init__.py配合 只有在__init__.py中的__all__存在的字符串模块名 才可以导入使用

总结:

  包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包

  有效避免模块名称冲突问题,让应用组织结构更加清晰

<1>__init__.py文件有什么用

__init__.py 控制着包导入模块的行为

<2> __init__.py为空

仅仅是把这个包导入,不会导入包中的模块

<3> __all__

在__init__.py文件中,定义一个__all__变量,它控制着 from 包名 import *时导入的模块

<4> 可以在__init__.py文件中编写内容

可以在这个文件中编写语句,当导入时,这些语句就会被执行

__init__.py文件

相关文章

网友评论

      本文标题:Python语言基础11

      本文链接:https://www.haomeiwen.com/subject/mvpoqqtx.html