一文搞懂python异常处理、模块与包


Posted in Python onJune 26, 2021

一 异常处理

1.什么是异常

Error(错误)是系统中的错误,程序员是不能改变的和处理的,如系统崩溃,内存空间不足,方法调用栈溢等。遇到这样的错误,建议让程序终止。
Exception(异常)表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

2常见异常

IndentationError: 缩进错误
KeyboardInterrupt:  Ctrl+C被按下
UnboundLocalError : 有同名的全局变量
d = {'name':'westos'}
print(d['age'])   # KeyError
 
with open('hello.txt') as f:   # FileNotFoundError
    pass
AttributeError 、IOError 、ImportError 、IndexError、
SyntaxError、TypeError、ValueError、KeyError、NameError

3 异常处理机制

一文搞懂python异常处理、模块与包

 Python 的异常机制主要依赖 try 、except 、else、finally 和 raise 五个关键字。

    try 关键字后缩进的代码块简称 try 块,它里面放置的是可能引发异常的代码;
    except 关键字对应异常类型和处理该异常的代码块;
    多个 except 块之后可以放一个 else 块,表明程序不出现异常时还要执行 else 块;
    finally 块用于回收在 try 块里打开的物理资源,异常机制会保证 finally 块总被执行;
    raise 用于引发一个实际的异常,raise 可以单独作为语句使用,引发一个具体的异常对象

除了处理实际的错误条件之外,对于异常还有许多其它的用处。在标准 Python 库中一个普通的用法就是试着导入一个模块,然后检查是否它能使用。导入一个并不存在的模块将引发一个 ImportError 异常。
 

#异常处理机制:
  #  else:没有异常时,执行的内容
    #finally: 总会执行的内容
 
 
try:
    a = 1
    print(b)
except NameError as e:
    print('0-name error')
except KeyError:
    print('4-key error')
except Exception as e:
    print('1-exception')
else:
    print('2-no error')
finally:
    print('3-run code')

4 触发异常

Python 允许程序自行引发异常,自行引发异常使用 raise 语句来完成。
raise语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,
args 是自已提供的异常参数。
raise [Exception [, args [, traceback]]]
 

age = int(input('age:'))
if 0<age<150:
    print(age)
else:
    # 抛出异常
    raise ValueError("年龄必须在0~150之间")

5 自定义异常

用户自定义异常都应该继承 Exception 基类或 Exception 的子类,在自定义异常类时基本不需要书写更多的代码,只要指定自定义异常类的父类即可。

# 自定义的异常
class AgeError(ValueError):
    pass

age = int(input('age:'))
if 0<age<150:
    print(age)
else:
    # 抛出异常
    raise AgeError("年龄必须在0~150之间")
    ```

二 模块与包

1.模块

一文搞懂python异常处理、模块与包

一文搞懂python异常处理、模块与包

 一文搞懂python异常处理、模块与包

 1.1在pycharm中建立一个python文件hello.py

"""
hello模块的说明文档
"""
digits = '0123456789'
 
def login():
    print('login.......')
 
# __all__当用户使用from module import *时,需要导入的内容。
__all__ = ['digits']
 
# 当模块内部执行时,需要执行的代码。 当模块被导入,则不执行。
if __name__ == '__main__':
    print(__name__)
    # 当在模块内部执行__name__的值为__main__.
    # 当模块被导入时,__name__的值为hello(模块名)

1.2. 注意: 自定义的python文件的文件名一定不要和已有的模块冲突。

1.3. 导入模块实质上是加载并执行模块的内容。

1.4. 导入模块的几种方式:

import  hello
print(hello.digits)
hello.login()

1.5. 模块的其他信息

import sys
print(sys.path) # 模块的查询路径

import hello
print(dir(hello)) # 查看hello模块可以使用的变量和函数…

print(hello.__doc__)# 查看模块的说明文档
print(hello.__file__) # 显示模块的绝对路径
print(hello.__name__) # __name__当模块被导入时,显示的是模块的名称
 

name的特殊用法

import  hello
"""
digits = '0123456789'
def login():
    print('login.......')
print(__name__)  # 当在模块内部执行__name__的值为__main__.
"""

2.包

包将有联系的模块组织在一起,有效避免模块名称冲突问题,让应用组织结构更加清晰。
一个普通的python应用程序目录结构:

2.1. 包实质上是包含__init__.py文件的目录。

2.2. 导入包实质是在做什么? 执行包里面的__init__.py的内容。

2.3. 导入包的方式:

sdk目录下包含的文件:

1.huawei.py
内容:
def create_ecs(): print('创建华为云') def delete_ecs(): print("删除华为云")

2.aili.py
 def create_ecs():
  print('创建阿里云')

def delete_ecs():
  print("删除阿里云")

3._init_.py
from . import  ali
from . import  huawei

from sdk import  ali
from sdk import  huawei
 
ali.create_ecs()
huawei.create_ecs()
 
import  sdk
sdk.ali.create_ecs()
sdk.huawei.create_ecs()

2.4.模块的分类

time模块

import  time
print(time.time())  # 计算时间戳
print(time.ctime()) # 字符串的时间, Sun Feb  7 17:09:55 2021
tuple_time = time.localtime()  # 元组类型的时间
print(tuple_time.tm_year)

datetime

from datetime import date, datetime, timedelta
print(date.today())  # 获取今天的日期
print(datetime.now())  # 获取当前时间2021-02-07 17:13:17.170345
print(date.today() + timedelta(days=3))  # 获取3天后的日期
print(date.today() - timedelta(days=3))  # 获取3天前的日期
print(datetime.now() + timedelta(minutes=10))  # 获取10分钟之后的时间信息
print(datetime.now() - timedelta(minutes=10))  # 获取10分钟之前的时间信息

 random

import  random
print(random.random())  # 生成0-1之间的小数
print(random.randint(1, 10)) # 生成1-10之间的整数
print(random.choice(['li', 'happy', 'fi'])) # 随机选择一个元素
print(random.sample(['ll', 'ff', 'oo'], 2)) # 随机选择n(n=2)个元素
print(random.choices(['ll', 'ff', 'oo'], weights=[100, 10, 10]))  # 随机选择一个元素,可以指定权重

string

import  string
print(string.digits)  # 获取所有的数字
print(string.ascii_letters)
print(string.ascii_lowercase)
print(string.ascii_uppercase)

颜色模块

from colorama import Fore
print(Fore.RED + 'Error: 主机不存在')
print(Fore.GREEN + 'Success: 主机创建成功')

生成测试信息的模块

from faker import  Faker
fake = Faker('zh-cn')
print(fake.name())
print(fake.address())
print(fake.email())

2.5.模块的安装

pip install ** 但在安装的时候较慢,尽量选择合适的源安装
pip install colorama -i https://pypi.douban.com/simple

以上就是python异常处理、模块与包的详细内容,更多关于python异常处理、模块与包的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
Python中的集合类型知识讲解
Aug 19 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
Python面向对象之类和实例用法分析
Jun 08 Python
Python中函数参数匹配模型详解
Jun 09 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
python isinstance函数用法详解
Feb 13 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 Python
Python环境管理virtualenv&amp;virtualenvwrapper的配置详解
Jul 01 Python
python -v 报错问题的解决方法
Sep 15 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 Python
Python实战之OpenCV实现猫脸检测
Python爬虫基础之简单说一下scrapy的框架结构
Python爬虫基础之初次使用scrapy爬虫实例
Python上下文管理器Content Manager
Jun 26 #Python
仅用几行Python代码就能复制她的U盘文件?
总结几个非常实用的Python库
Jun 26 #Python
手残删除python之后的补救方法
You might like
PHP在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
php你的验证码安全码?
2007/01/02 PHP
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
[原创]php实现子字符串位置相互对调互换的方法
2016/06/02 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
Javascript模块模式分析
2008/05/16 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
JS实现按钮添加背景音乐示例代码
2017/10/17 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
如何通过javaScript去除字符串两端的空白字符
2020/02/06 Javascript
[04:22]DOTA2上海特级锦标赛主赛事第四日TOP10
2016/03/06 DOTA
Python脚本实现12306火车票查询系统
2016/09/30 Python
python实现大转盘抽奖效果
2019/01/22 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
工业学校毕业生自荐书
2014/01/03 职场文书
汉语言文学职业规划
2014/02/14 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
搞笑结婚保证书
2015/05/08 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python