python错误和异常(1)
2013-08-29 19:47
218 查看
1 SyntaxError: Python解释器语法错误,是唯一不是在运行时发生的异常。
2 检测和处理异常
try语句有两种主要形式:try-except 和 try-finally. 只能二选一。
一个try语句可以对应一个或多个except子句,但只能对应一个finally子句。
try语句块中异常发生点后的剩余语句永远不会到达。
except后面相当于一个处理器,处理异常发生时应该怎么做。
异常或错误的处理流程:当一个异常被引发,剩余代码将会忽略,解释器搜索处理器,如果没有合适的处理器,那么异常就向上移交给调用者去处理,这意味着堆栈框架立即回到之前的那个,如果在上层调用者也没有找到对应的处理器,该异常会继续被向上提交,直到找到合适的处理器,如果到达最顶层仍然没有找到对应处理器,那么就认为这个异常是未处理的,python解释器会显示出跟踪返回消息,然后退出。
try-except语句可以连贯使用,这样可以处理多种异常。
这样,safe_float()函数就可以分别处理ValueError和TypeError两种异常了。
python2.5以后,对于keyboardInterrupt和SystemExit两个异常(not real error),从Exception里移出,和Exception平级,这样当使用如下的catch_all代码时,就不比为这两个异常创建额外的处理器。
异常参数:异常引发后,它会被传递给异常处理器,作为附加帮助信息,一般包含一个指示错误原因的字符串元组。
finally子句:finally子句是无论异常是否发生,是否捕捉都会执行的一段代码。
上面这段代码有两种可能的执行顺序:
正常:A-C-D
异常:A-B-D
try-finally语句:这个语句不是用来捕获异常的。当try的语句块中有异常发生时,会立即跳转到finally语句段,当finally中的所有代码都执行完毕后,会继续向上一层引发异常。
try语句的嵌套:
一个需要注意的地方是:如果finally中的代码引发了另一个异常或由于return, break, continue语法而终止,原来的异常将会丢失而无法重新引发。
后面会接着讲到 with语句等。
2 检测和处理异常
try语句有两种主要形式:try-except 和 try-finally. 只能二选一。
一个try语句可以对应一个或多个except子句,但只能对应一个finally子句。
try语句块中异常发生点后的剩余语句永远不会到达。
except后面相当于一个处理器,处理异常发生时应该怎么做。
异常或错误的处理流程:当一个异常被引发,剩余代码将会忽略,解释器搜索处理器,如果没有合适的处理器,那么异常就向上移交给调用者去处理,这意味着堆栈框架立即回到之前的那个,如果在上层调用者也没有找到对应的处理器,该异常会继续被向上提交,直到找到合适的处理器,如果到达最顶层仍然没有找到对应处理器,那么就认为这个异常是未处理的,python解释器会显示出跟踪返回消息,然后退出。
try-except语句可以连贯使用,这样可以处理多种异常。
def safe_float(obj): try: retval = float(obj) except ValueError: retval = 'could not convert non-number to float' except TypeError: retval = 'object type cannot be converted to float' return retval
这样,safe_float()函数就可以分别处理ValueError和TypeError两种异常了。
python2.5以后,对于keyboardInterrupt和SystemExit两个异常(not real error),从Exception里移出,和Exception平级,这样当使用如下的catch_all代码时,就不比为这两个异常创建额外的处理器。
try: .... except Exception, e: #handle real errors
异常参数:异常引发后,它会被传递给异常处理器,作为附加帮助信息,一般包含一个指示错误原因的字符串元组。
finally子句:finally子句是无论异常是否发生,是否捕捉都会执行的一段代码。
try: A except MyException: B else: C finally: D
上面这段代码有两种可能的执行顺序:
正常:A-C-D
异常:A-B-D
try-finally语句:这个语句不是用来捕获异常的。当try的语句块中有异常发生时,会立即跳转到finally语句段,当finally中的所有代码都执行完毕后,会继续向上一层引发异常。
try语句的嵌套:
ccfile = None try: tyr: ccfile = open('cardata.txt', 'r') txns = ccfile.readlines() except IOError: log.write('no txns this month\n') finally: if ccfile: ccfile.close()这样写的好处是,当readlines调用失败时,异常处理会去继续执行except中的子句,并且在finally子句中会去尝试关闭文件。
一个需要注意的地方是:如果finally中的代码引发了另一个异常或由于return, break, continue语法而终止,原来的异常将会丢失而无法重新引发。
后面会接着讲到 with语句等。
相关文章推荐
- 解决Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误
- Python基础--第7章 错误与异常——调教出听话的程序
- python异常和错误
- python 异常错误 try except else finally
- 解决Python2.7的UnicodeEncodeError: ‘ascii‘codec can’t encode异常错误
- Python基础学习代码之错误和异常
- Python错误和异常
- [Python] - 错误和异常
- python的错误和异常
- Python Jupyter Notebook 中的错误异常与代码调试
- python学习第十八天 --错误&异常处理
- python 错误与异常
- 解决Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误
- 【python学习】之一、错误与异常
- Python错误和异常总结
- Python 错误和异常小结
- Python学习_07_错误、异常
- Python 2.7 Tutorial —— 错误和异常
- 解决Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误