python异常处理及内置模块
异常处理
有时候我们在写程序的时候会出现错误或者异常,导致程序终止,如下这个例子:
#!/usr/bin/env python
a = 2/0
print(a)
结果提示如下错误:
Traceback (most recent call last):
File "002.py", line 2, in <module>
a = 2/0
ZeroDivisionError: integer division or modulo by zero
上面提示被除数不能为0,从而导致程序运行中断,为了能够让程序正常执行,我们可以添加tey...except...语句:
try:
a = 2/0
print(a)
except Exception as e:
print("除数不能为0")
#raise e # 把异常抛出来
finally:
print("无论发生什么情况,都执行此步。") 结果:
除数不能为0
无论发生什么情况,都执行此步。
上面如果加上了raise e,则会把异常信息打印出来:ZeroDivisionError: integer division or modulo by zero。其中except部分是对错误信息进行处理,finally是不管之前有没有异常,都会执行此步骤。
python标准异常类:
| 异常名称 | 描述 |
|---|---|
| BaseException | 所有异常的基类 |
| SystemExit | 解释器请求退出 |
| KeyboardInterrupt | 用户中断执行(通常是输入^C) |
| Exception | 常规错误的基类 |
| StopIteration | 迭代器没有更多的值 |
| GeneratorExit | 生成器(generator)发生异常来通知退出 |
| SystemExit | Python 解释器请求退出 |
| StandardError | 所有的内建标准异常的基类 |
| ArithmeticError | 所有数值计算错误的基类 |
| FloatingPointError | 浮点计算错误 |
| OverflowError | 数值运算超出最大限制 |
| ZeroDivisionError | 除(或取模)零 (所有数据类型) |
| AssertionError | 断言语句失败 |
| AttributeError | 对象没有这个属性 |
| EOFError | 没有内建输入,到达EOF 标记 |
| EnvironmentError | 操作系统错误的基类 |
| IOError | 输入/输出操作失败 |
| OSError | 操作系统错误 |
| WindowsError | 系统调用失败 |
| ImportError | 导入模块/对象失败 |
| KeyboardInterrupt | 用户中断执行(通常是输入^C) |
| LookupError | 无效数据查询的基类 |
| IndexError | 序列中没有没有此索引(index) |
| KeyError | 映射中没有这个键 |
| MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
| NameError | 未声明/初始化对象 (没有属性) |
| UnboundLocalError | 访问未初始化的本地变量 |
| ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
| RuntimeError | 一般的运行时错误 |
| NotImplementedError | 尚未实现的方法 |
| SyntaxError | Python 语法错误 |
| IndentationError | 缩进错误 |
| TabError | Tab 和空格混用 |
| SystemError | 一般的解释器系统错误 |
| TypeError | 对类型无效的操作 |
| ValueError | 传入无效的参数 |
| UnicodeError | Unicode 相关的错误 |
| UnicodeDecodeError | Unicode 解码时的错误 |
| UnicodeEncodeError | Unicode 编码时错误 |
| UnicodeTranslateError | Unicode 转换时错误 |
| Warning | 警告的基类 |
| DeprecationWarning | 关于被弃用的特征的警告 |
| FutureWarning | 关于构造将来语义会有改变的警告 |
| OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
| PendingDeprecationWarning | 关于特性将会被废弃的警告 |
| RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
| SyntaxWarning | 可疑的语法的警告 |
| UserWarning | 用户代码生成的警告 |
模块
a.py
#!/usr/bin/env python
def hello():
print("hello")
hello() def world():
print("world")
world() b.py
#!/usr/bin/env python
import a 运行python b.py结果:
hello
world
如上 ,当我们在b.py中将a.py作为模块导入之后,在运行b.py的时候,直接会运行a.py里面的所有函数,但是如果我们只想要在b.py中调用a.py中指定函数的时候运行,就需要在a.py中加入if __name__ == "__main__":语句:
a.py
#!/usr/bin/env python
def hello():
print("hello") def world():
print("world") if __name__ == "__main__":
hello()
world() b.py
#!/usr/bin/env python
import a
a.hello()
a.world() 运行python b.py之后的结果:
hello
world
import datetime
# 下面我们使用的是datetime模块下面的datetime模块,所以使用的时候需要datetime.datetime,为了更方便的使用,也可以直接使用from datetime import datetime
print(datetime.datetime.now()) # 打印当前时间 2018-04-23 09:33:32.055974
print(datetime.datetime.now().year) # 打印当前时间中的年份 2018
print(datetime.datetime.now().month) # 打印当前时间中的月份 4
print(datetime.datetime.now().day) # 打印当前时间中的天 23
print(datetime.datetime.now().hour) # 打印当前时间中的小时 9
print(datetime.datetime.now().minute) # 打印当前时间中的分钟 33
print(datetime.datetime.now().second) # 打印当前时间中的秒 32
print(datetime.datetime.now().microsecond) # 打印当前时间中的毫秒 56063
print(datetime.datetime.now().strftime("%Y-%m-%d")) # 从时间格式转换成字符串,满足"%Y-%m-%d"格式的字符串格式 2018-04-23 09:33:32.055974 --> 2018-04-23
print(datetime.datetime.now().strftime("%c")) # 标准时间,类似于这种格式 Mon Apr 23 09:50:45 2018
print(datetime.datetime.now().strftime("%a")) # 本地简化星期名称 Mon
print(datetime.datetime.now().strftime("%b")) # 本地简化月份名称 Apr
print(datetime.datetime.now().strftime("%d")) # 当前这天是一个月中的第几天 23
# 直接导入datetime模块下面的datetime
#from datetime import datetime
#print(datetime.now())
#!/usr/bin/env python
from datetime import datetime
from datetime import timedelta
now_time = datetime.now() # 当前时间
print(now_time)
b = now_time + timedelta(days = -1) # 一天前
print(b)
c = now_time + timedelta(days = -1,weeks = -1) # 一个周前的前一天
print(c) 结果:
2018-04-23 10:35:40.245370
2018-04-22 10:35:40.245370
2018-04-15 10:35:40.245370
#!/usr/bin/env python
import time
time.sleep(2) # 暂停2秒后,打印
print("Hello")
print(time.time()) # 打印时间戳,即从1970-01-01到现在的秒数 print(time.localtime())
# time.struct_time(tm_year=2018, tm_mon=4, tm_mday=23, tm_hour=10, tm_min=47, tm_sec=59, tm_wday=0, tm_yday=113, tm_isdst=0)
time.strptime(string,[,format]) # 把一个格式化时间字符串转化为struct_time,它和strftime是逆操作。
commands模块
有时候我们需要使用shell命令,就用到了commands模块。
#!/usr/bin/env python
import commands
output = commands.getoutput("ls -ll") # 返回执行完命令后的结果
print(output)
status, output = commands.getstatusoutput("ls -l") # 返回一个元组,如果shell执行成功,第一个值(状态码)是0表示成功,第二个值是shell执行结果
print(status,output)
subprocess模块
和commands模块用法类似,都是用来执行shell命令的。
#!/usr/bin/env python
from subprocess import PIPE,Popen
p = Popen(['ifconfig'],stdout=PIPE)
data = p.stdout.read()
print(data)
python异常处理及内置模块的更多相关文章
- python的一些内置模块
整理了几种python的常用内置模块. 内置函数思维导图:https://www.processon.com/view/link/5c7902b1e4b0168e4200846a re模块 re(re ...
- python异常处理(基础)
之前在学习python的时候有整理过python异常处理的文章,不够简单也不够完整,所以决定再整理一篇,算做补充. http://www.cnblogs.com/fnng/archive/2013/0 ...
- Python异常处理 分类: python Raspberry Pi 服务器搭建 2015-04-01 13:22 172人阅读 评论(0) 收藏
一个程序要保持稳定运行必须要有异常处理,本文将简单介绍Python中的try-except..异常处理语句的使用. 该种异常处理语法的规则是: 执行try下的语句,如果引发异常,则执行过程会跳到第一个 ...
- Python 异常处理--raise函数用法
raise语句手工引发一个异常: "raise" [expression ["," expression ["," expression]] ...
- [Python学习笔记][第八章Python异常处理结构与程序调试]
1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...
- python异常处理try,except,else,finally,raise
先看下else的使用: try: ... exception: ... else: ... 只有在try中没有发生任何异常,所有代码完全成功的情况下才会转入else 再看下finally: final ...
- Python 异常处理
Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言 ...
- python异常处理的哲学
所谓异常指的是程序的执行出现了非预期行为,就好比现实中的做一件事过程中总会出现一些意外的事.异常的处理是跨越编程语言的,和具体的编程细节相比,程序执行异常的处理更像是哲学.限于认知能力和经验所限,不可 ...
- Python异常处理总结
一.何谓异常处理 在我们调试程序时,经常不可避免地出现意料之外的情况,导致程序不得不停止运行,然后提示大堆提示信息,大多是这种情况都是由异常引起的.异常的出现一方面是因为写代码时粗心导致的语法错误,这 ...
随机推荐
- IOS折线图
做项目要统计商品的销售情况,美工那边给了效果图,自己就按照效果图自定义了一个ScrollView.整体效果不错,在做的过程中遇到的问题也记录一下. 现在这个还有许多优化的地方: 1.一个表中只能画一个 ...
- 使用 Angular 和 RxJS 实现的无限滚动加载
无限滚动加载应该是怎样的? 无限滚动加载列表在用户将页面滚动到指定位置后会异步加载数据.这是避免寻主动加载(每次都需要用户去点击)的好方法,而且它能真正保持应用的性能.同时它还是降低带宽和增强用户体验 ...
- Java中用双缓冲技术消除闪烁
在Java编写具有连贯变化的窗口程序时,通常的办法是在子类中覆盖父类的paint(Graphics)方法,在方法中使用GUI函数实现窗口重绘的过程.连贯变换的窗口会不断地调用update(Graphi ...
- MAVEN的基本配置,以及Hello Word
MAVEN介绍 Maven是一个项目构建工具,参与项目创建.jar包管理.编译.运行.打包和发布等过程. Maven工具目的是以一种简便方式在多个项目中共享jar包. MAVEN安装和配置 Maven ...
- 京东-Java开发工程师-一面
时间:2017-4-7 16:47 时长:32分19秒 类型:笔试前电话面试 之前打过一个电话过来说了一声,下午就直接打过来面试了,没有自我介绍貌似 1. 你做的这些东西是什么样的? 2. 选一个你觉 ...
- PHP高级工程师面试 - 笔试题
Part1:HTTP协议 1.状态码的含义 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 100 (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求 ...
- POJ 2524(并查集)
这道题多了一个检查是否包含所有元素 可以设一个cnt表示集合里的数量,再与外面比较 #include <cstdio> #include <iostream> #include ...
- Redis-概述
Redis支持的类型: String,List,Map,Set,Sorted set Redis的持久化: 1.Redis DataBase (RDB): RDB是在某个时间点将数据写入一个临时文件, ...
- js画一棵树
用纯js画一棵树.思路: 1.一棵树的图片,作为页面背景: 2.通过html5中的canvas画布进行遮罩: 3.定时每隔10ms,从下往上清除1px的遮罩: <!DOCTYPE html> ...
- csharp: Gets a files formatted size.
/* ASP.NET 默认上传文件是4M ,可以修改服务配置.. <system.web> <!-- 指示 ASP.NET 支持的最大文件上载大小. 该限制可用于防止因用户将大量文件 ...