Python2.7.x 错误和异常
来源:互联网 发布:淘宝店铺号和旺旺号 编辑:程序博客网 时间:2024/06/02 21:06
错误:
1、语法错误:代码不符合解释器或者编译器语法
2、逻辑错误:不完整、不合法输入、计算出现问题
异常:执行过程中出现问题导致程序无法执行
1、程序遇到逻辑或者算法问题
2、运行过程中计算机错误(内存不够或者IO错误)
区别:
错误:
代码运行前的语法或者逻辑错误
语法错误在执行前修改,逻辑错误无法修改
异常分为两个步骤
1、异常产生,检查到错误且解释器认为是异常,抛出异常
2、异常处理,截获异常,忽略或者终止程序处理异常;
一、Python常见错误
错误
二、错误和异常的处理方式
Python完整的捕获异常的语句有点像:
try: try_suite except Exception1,Exception2,...,Argument: exception_suite ...... #如果要处理多个异常,再写except Exception1,Exception2,...,Argument: else: no_exceptions_detected_suite finally: always_execute_suite
2-1.try-except : 异常处理
try: try_suite except Exception [e]: exception block注意:
1、如果except子句不跟任何异常和异常参数(Exception [e]),则无论try捕获了任何异常,都将交给except子句的exception block来处理。
2、except用来处理异常,如果处理异常和设置捕获异常一致,使用exception_block处理异常,否则不能捕获。
except子句后面那个Argument其实是一个异常类的实例,包含了来自异常代码的诊断信息。也就是说,如果你捕获了一个异常,你就可以通过这个异常类的实例来获取更多的关于这个异常的信息。例如:
>>> try:... 1/0... except ZeroDivisionError,reason:... pass... >>> type(reason)<type 'exceptions.ZeroDivisionError'>>>> print reasoninteger division or modulo by zero>>> reasonZeroDivisionError('integer division or modulo by zero',)>>> reason.__class__<type 'exceptions.ZeroDivisionError'>>>> reason.__class__.__doc__'Second argument to a division or modulo operation was zero.'>>> reason.__class__.__name__'ZeroDivisionError'面试期间可能会问的问题,下面两个实例能获取异常吗?
try: undefexcept: print "catch an except"这个是可以捕获异常的,因为是运行时错误。
try: if undefexcept: print "catch an except"上面这个是不能捕获异常的,因为是语法错误,运行前错误
2-2.try ... except...else语句
现在我们来说说这个else语句。Python中有很多特殊的else用法,比如用于条件和循环。放到try语句中,其作用其实也差不多:就是当没有检测到异常的时候,则执行else语句。举个例子大家可能更明白些:
try: f = open('1.txt') line = f.read(2) num = int(line)except IOError, e: print "catch IOError: " , eexcept ValueError, e: print "catch ValueError:" , eelse: print "No Error"
2-3.try ... finnaly
finally子句是无论是否检测到异常,都会执行的一段代码。我们可以丢掉except子句和else子句,单独使用try...finally,也可以配合except等使用。
try: f = open('/home/changwen/1.txt') print int(f.read())finally: print "file close" f.close()如果1.txt文件内容为“test"file close
Traceback (most recent call last):
File "test2.py", line 3, in <module>
print int(f.read())
ValueError: invalid literal for int() with base 10: 'test\n'
2-4.with ... as
with context_expr [as var]: with_suite1.with语句用来代替try-except-finally语句,使代码更加简洁
2.context_expr表达式返回是一个对象
3.var用来保存context返回对象,单个返回值或者元组;
4.with_suite 使用var变量来对context返回对象进行操作
with open('/home/changwen/1.txt') as f: for line in f: print line上面这几行代码干了什么?
1.打开文件/home/changwen/1.txt
2.将文件对象赋值给 f
3.将文件所有行输出
4.无论代码中是否出现异常,Python都会为我们关闭这个文件,我们不需要关心这些细节。
注意,with ... as 只能确保文件最后会关闭,但如果里面有异常,还是需要对其其捕获
使用with语句来使用这些共享资源,我们不用担心会因为某种原因而没有释放他。但并不是所有的对象都可以使用with语句,只有支持上下文管理协议(context management protocol)的对象才可以,那哪些对象支持该协议呢?如下表:file、decimal.Context、thread.LockType、threading.Lock、threading.RLock、threading.Condition、threading.Semaphore、threading.BoundedSemaphore
with语句实质是上下文管理:
1.上下文管理协议:包含方法__enter__() 和__exit__(),支持该协议的对象要实现这两个方法
2.上下文管理器:定义执行with语句时要建立的运行时上下文,负责执行with语句块上下文中的进入与退出操作
3.进入上下文管理器:调用管理器__enter__方法,如果设置as var语句, var变量接受__enter__()方法返回值
4.退出上下文管理器:调用管理器__exit__方法,
三、标准异常和自定义异常
3-1.raise语句和assert语句
raise语句用于主动抛出异常
语法格式:raise[exception[, args]]
exception : 异常类
args : 描述异常信息的元组
raise TypeError, " test error"Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: test errorassert语句
断言语句:assert语句用于检测表达式是否为真,如果为假,引发AssertionError错误;
语法格式:assert expression [, args]
expression:表达式
args:判断条件的描述信息
assert 7==6, "test assert"Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: test assert
3-2.标准异常和自定义异常
自定义异常:
1.python允许自定义异常用于描述python中没有涉及的异常情况;
2.自定义异常必须继承Exception类
3.自定义异常只能主动触发
#自定义异常类class FileError(IOError): pass可以用try ... except捕获异常
>>> try:... raise FileError, "test fileError"... except FileError, e:... print e... test fileError再来一个自定义异常例子
#!/usr/bin/python2.7class CustomError(Exception): def __init__(self, info): Exception.__init__(self) self.errorinfo = info print id(self) def __str__(self): return "CustionError: %s" % self.errorinfotry: raise CustomError("test CustomError")except CustomError, e: print "ErrorInfo: %d, %s" %(id(e), e)
changwen@ubuntu:~$ python test2.py140242667936816
ErrorInfo: 140242667936816, CustionError: test CustomError
- Python2.7.x 错误和异常
- python3.X中简单错误处理,和Python2区别
- 解决Python2.x的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误
- Python2.x的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误
- python2.x->python3.x 的一些错误
- Python2.7-异常和工具
- Python3.x和Python2.x的区别
- Python3.x和Python2.x的区别
- Python3.x和Python2.x的区别
- Python3.x和Python2.x的区别
- Python3.x和Python2.x的区别
- Python3.x和Python2.x的区别
- Python3.x和Python2.x的区别
- Python3.x和Python2.x的区别
- Python3.x和Python2.x的区别
- Python3.x和Python2.x的区别
- Python3.x和Python2.x的区别
- Python3.x和Python2.x的区别
- Linux/Unix 判断一个路径是目录还是文件
- 三个开源的ai项目
- Adb connection Error:远程主机强迫关闭了一个现有的连接。
- Wolf and Rabbit hd 1222
- Hadoop单机安装
- Python2.7.x 错误和异常
- 进程线程
- 用Fiddler模拟低速网络环境 差网络模拟工具 http 500是什么意思?
- 酷派大神F1-救砖详细教程! 酷派8297w(大神F1联通版) 恢复官方兼救砖
- onAttachedToWindow和onDetachedFromWindow
- AOP术语
- namenode正处于safemode状态,怎么处理?
- Unique Paths II
- 《Java之异常处理》