学习Python的那些事儿_Day9_1_错误异常处理
思维导图
错误异常处理
错误处理
测试级别
语法错误
语法错误又称解析错误,最容易遇到的错误:
>>> while True print('Hello world')
File "<stdin>", line 1
while True print('Hello world')
^
SyntaxError: invalid syntax
解析器会输出出现语法错误的那一行,并显示一个“箭头”,指向这行里面检测到第一个错误。 错误是由箭头指示的位置 上面 的 token 引起的(或者至少是在这里被检测出的):在示例中,在 print() 这个函数中检测到了错误,因为在它前面少了个冒号 (’:’) 。文件名和行号也会被输出,以便输入来自脚本文件时你能知道去哪检查。
语义错误
当程序由于运行时错误而停止时,通常会说程序崩溃了。在 Python 中,这种运行时错误被称为异常。
Python 中的一些运行时错误:
使用未定义的标识符(NameError)
除数为 0(ZeroDivisionError)
打开的文件不存在(FileNotFoundError)
导入的模块没被找到(ImportError)
>>> 5 / 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
每当出现这类运行时错误时,Python 就会创建一个异常对象。如果处理不当,会输出一个跟踪(Traceback)到那个错误,以及关于为什么会出现错误的一些细节。
逻辑错误
逻辑错误:是指程序的执行结果与预期不符(程序可以正常运行,不会 Crash)。
常见的逻辑错误有:
运算符优先级考虑不周
变量名使用不正确
语句块缩进层次不对
在布尔表达式中出错
>>> def average(a, b):
... return a + b / 2 # 应为 (a + b) / 2
...
>>>
异常处理
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行
try / except
while True:
try:
x = int(input("请输入一个数字: "))
break
except ValueError:
print("您输入的不是数字,请再次尝试输入!")
首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
如果没有异常发生,忽略 except 子句,try 子句执行后结束。
如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
如果一个异常没有与任何的 excep 匹配,那么这个异常将会传递给上层的 try 中。
try / except / else
try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。
else 子句将在 try 子句没有发生任何异常的时候执行。
在 try 语句中判断文件是否可以打开,如果打开文件时正常的没有发生异常则执行 else 部分的语句,读取文件内容:
for arg in sys.argv[1:]:
try:
f = open(arg, 'r')
except IOError:
print('cannot open', arg)
else:
print(arg, 'has', len(f.readlines()), 'lines')
f.close()
finally
try-finally 语句无论是否发生异常都将执行最后的代码。
try:
runoob()
except AssertionError as error:
print(error)
else:
try:
with open('file.log') as file:
read_data = file.read()
except FileNotFoundError as fnf_error:
print(fnf_error)
finally:
print('这句话,无论异常是否发生都会执行。')
raise
使用 raise 语句抛出一个指定的异常
try:
正常的操作
......................
except ExceptionType, Argument:
你可以在这输出 Argument 的值...
变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收一个或者多个值。
元组通常包含错误字符串,错误数字,错误位置。