您的位置:首页 > 编程语言 > Python开发

python之错误和异常

2017-01-04 00:09 211 查看

错误和异常

1 错误

从软件层面上来说,错误分为语法错误和逻辑错误,语法错误指示软件的结构上有错误, 导致不能被解释器解释或编译器无法编译. 这些错误必须在程 序执行前纠正。 逻辑错误可能是由于不完整或是不合法的输入 所致; 在其他情况下, 还可能是逻辑无法生成, 计算, 或是输出结果需要的过程无法执行。

2 异常

对异常的好描述是: 它是因为程序出现了错误而在正常控制流以外采取的行为. 这个行为又 分为两个阶段: 首先是引起异常发生的错误, 然后是检测(和采取可能的措施)阶段。

3 Python 中的异常

python中的异常也是一个类,所有的异常都继承自baseexception。每个异常都由三部分组成:traceback,错误名称,错误原因。

4 python中检测和处理异常的机制是try-except语句

如下:

try:
try_suite    # watch for exceptions here 监控这里的异常
except Exception[, reason]:
except_suite    # exception-handling code  异常处理代码


5 带有多个except的try语句

try:
try_suite
except Exception[, reason]:
except_suite
except Exception1[, reason1]:
suite_for_exception_Exception1
except Exception2[, reason2]:
suite_for_exception_Exception2


6 在python中还可以处理多个异常的except语句, except 语句在处理多个异常时要求异常被放 在一个元组里

except (Exc1[, Exc2[, ... ExcN]])[, reason]:
suite_for_exceptions_Exc1_to_ExcN


7 捕获所有异常

在python中大多数类都继承自exception,所以可以用这个异常捕捉大多数异常:

try:
try_suite
except Exception as e:
except_suite


8 else子句

在 try 范围中没有异常被检测到时,执行 else 子 句

try:
3rd_party_module.function()
except:
log.write("*** caught exception in module\n")
else:
log.write("*** no exceptions caught\n")


9 finally子句

finally 子句是无论异常是否发生,是否捕捉都会执行的一段代码。

下面是 try-except-else-finally 语法的示例:

try:
A
except MyException: B
else: C
finally: D


10 try-except-else-finally:语句

try:
try_suite
except Exception1:
suite_for_Exception1
except (Exception2, Exception3, Exception4):
suite_for_Exceptions_2_3_and_4
except Exception5 as Argument5:
suite_for_Exception5_plus_argument
else:
no_exceptions_detected_suite
finally:
always_execute_suite


11 触发异常

到目前为止,我们所见到的异常都是由解释器引发的.由于执行期间的错误而引发.程序员在编 写 API 时也希望在遇到错误的输入时触发异常,为此,Python 提供了一种机制让程序员明确的触发异 常:这就是 raise 语句。

raise [SomeException [, args [, traceback]]]


第一个参数,SomeExcpetion,是触发异常的名字。

第二个符号为可选的 args(比如参数,值),来传给异常。

12 断言

断言是一句必须等价于布尔真的判定。

断言语句等价于这样的 Python 表达式,如果断言成功不采取任何措施(类似语句),否则触发 AssertionError(断言错误)的异常.assert 的语法如下:

assert expression[, arguments]


下面是我们如何用 try-except 语句捕获 AssertionError 异常:

try:
assert 1 == 0, 'One does not equal zero silly!'
except AssertionError as args:
print '%s: %s' % (args.__class__.__name__, args)


13 创建异常

尽管标准异常集包含的内容已经相当广泛,你还是可以创建自己的异常.一种情况是你想在特定 的标准异常和模块异常中添加额外的信息。

14 为什么用异常

在应用层处理错误的能力近来变得更为重要, 用户已不再是应用程序的的唯一的直接运行者,程序再也不能只是直接的失败或崩溃,如果这样,就会导致无法挽回的损失。

15 异常和sys模块

另一种获取异常信息的途径是通过 sys 模块中 exc_info()函数. 此功能提供了一个 3 元组 (3-tuple)的信息, 多于我们单纯用异常参数所能获得. 让我们看看如何用 sys.exc_info() :

try: ...
float('abc123') ...
except: ...
import sys ...
exc_tuple = sys.exc_info()


我们从 sys.exc_info()得到的元组中是:

exc_type: 异常类

exc_value: 异常类的实例

exc_traceback: 追踪(traceback)对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 异常 结构 软件