异常处理

有时候我们在写程序的时候会出现错误或者异常,导致程序终止,如下这个例子:

#!/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 用户代码生成的警告

  

模块

模块和目录的区别,看整个文件夹里面是否有__init__.py文件,有就是模块,没有就是普通目录。__init__.py一般是一个空文件。
通常一个.py文件我们就可以称之为一个模块。
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
由上可以看出,加上if __name__ == "__main__":语句之后,就能满足我们的需求。
总结:
    1、文件夹里面需要有__init__.py文件的才能当做模块使用。
    2、if __name__ == "__main__":语句的使用。
 
内置模块
 
datetime
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())
%Y    带世纪部分的十进制年份
%m   十进制表示的月份
%d    十进制表示的每月的第几天
%H    24小时制的小时
%M    十进制表示的分钟数
%S    十进制的秒数
 
如果我们需要表示昨天、上周等情况:
#!/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
time模块
这个time模块不是datetime下面的那个模块,它是一个单独的模块。
#!/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异常处理及内置模块的更多相关文章

  1. python的一些内置模块

    整理了几种python的常用内置模块. 内置函数思维导图:https://www.processon.com/view/link/5c7902b1e4b0168e4200846a re模块 re(re ...

  2. python异常处理(基础)

    之前在学习python的时候有整理过python异常处理的文章,不够简单也不够完整,所以决定再整理一篇,算做补充. http://www.cnblogs.com/fnng/archive/2013/0 ...

  3. Python异常处理 分类: python Raspberry Pi 服务器搭建 2015-04-01 13:22 172人阅读 评论(0) 收藏

    一个程序要保持稳定运行必须要有异常处理,本文将简单介绍Python中的try-except..异常处理语句的使用. 该种异常处理语法的规则是: 执行try下的语句,如果引发异常,则执行过程会跳到第一个 ...

  4. Python 异常处理--raise函数用法

    raise语句手工引发一个异常: "raise" [expression ["," expression ["," expression]] ...

  5. [Python学习笔记][第八章Python异常处理结构与程序调试]

    1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...

  6. python异常处理try,except,else,finally,raise

    先看下else的使用: try: ... exception: ... else: ... 只有在try中没有发生任何异常,所有代码完全成功的情况下才会转入else 再看下finally: final ...

  7. Python 异常处理

    Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言 ...

  8. python异常处理的哲学

    所谓异常指的是程序的执行出现了非预期行为,就好比现实中的做一件事过程中总会出现一些意外的事.异常的处理是跨越编程语言的,和具体的编程细节相比,程序执行异常的处理更像是哲学.限于认知能力和经验所限,不可 ...

  9. Python异常处理总结

    一.何谓异常处理 在我们调试程序时,经常不可避免地出现意料之外的情况,导致程序不得不停止运行,然后提示大堆提示信息,大多是这种情况都是由异常引起的.异常的出现一方面是因为写代码时粗心导致的语法错误,这 ...

随机推荐

  1. web工程中文字符乱码:try { res.setContentType("text/html;charset=gbk"); PrintWriter pw=res.getWriter(); ;;; }

    输入正确的name ,pwd  跳转到main 页面 证明:登录信息确认基本正确 用户名,密码不对时提示:信息错误 注意编码格式: 应设置如下:在try中设置字符编码为gbk,在try外有时出错,设置 ...

  2. 9.Symbol

    Symbol Symbol 概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突.比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有 ...

  3. .NET中的集合-ArrayList1

    集合命名空间: using.System.Collections;(非泛型集合) using.System.Collections.Genneric(泛型集合) 常用的集合 1.“类似数组”集合:Ar ...

  4. 使用WrapPanel和DockPanel

    WrapPanel和DockPanel也是连个比较简单的布局容器,这两个空间将弥补StackPanel的某些不足,该开发人员更多可选择的布局方式,这两个作用如下: WrapPanel控件:该控件根据O ...

  5. RabbitMQ---5、qos内存溢出+prefetch消息堵塞问题

    1.prefetch消息堵塞问题 mq是实现代码扩展的有利手段,个人喜欢用概念来学习新知识,介绍堵塞问题的之前,先来段概念的学习. ConnectionFactory:创建connection的工厂类 ...

  6. Linux 服务器 MySql的安装和网站的发布

    Linux安装MySql,并配置能通过自己的电脑连接服务器的数据库 昨天安装的MySql,今天上午配置MySql能使用本机连接服务器数据库,服务器时DigitalOcean的,提供了很全面很专业的文档 ...

  7. 六、curator recipes之屏障barrier

    简介 curator针对分布式场景实现了分布式屏障:barrier.我们在分布式系统中可以使用barrier去阻塞进程,知道某个条件被触发.其实跟Java多线程的barrier是一样的. 例如:当两个 ...

  8. 撩课-Web大前端每天5道面试题-Day7

    1. 你能描述一下渐进增强和优雅降级之间的不同吗? 定义: 优雅降级(graceful degradation): 一开始就构建站点的完整功能, 然后针对浏览器测试和修复 渐进增强(progressi ...

  9. hdu 1880 魔咒词典 (字符串哈希)

    魔咒词典 Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  10. Linux下ipv6配置系列

    Linux下ipv6配置系列一:如何配置Linux系统ipv6环境 Linux下ipv6配置系列二:如何为Nginx添加ipv6模块 Linux下ipv6配置系列三:如何为Nginx配置IPv6端口监 ...