Python语言基础11

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文件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容