python错误和异常
1、assert(断言)用于判断一个表达式,在表达式为false时触发异常。assert可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,例如我们的代码只能在 Linux 系统下运行,可以先判断当前系统是否符合条件。
其语法:assert expression 等价于:
if not expression:
raise AssertionError
2、除了语法分析器发现的语法错误外,到运行期也可能会发生错误,此时称之为异常:如ZeroDivisionError,NameError 和 TypeError等等。
异常处理:
1)try/except:异常捕捉:
架构:
try:{#一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
执行代码。(如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。)
}
except:{#异常类型符合时,将执行下面代码,如果一个异常没有与任何的 excep 匹配,那么这个异常将会传递给上层的 try 中。
发生异常时执行的代码。(没有发生异常时,此部分会被忽略)
}
备注:一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,例如:
except (RuntimeError, TypeError, NameError):
pass
另外,最后一个except子句可以忽略异常的名称,它将被当作通配符使用。
2)try/except...else:try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。
架构:
try:{#一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
执行代码。(如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。)
}
except:{#异常类型符合时,将执行下面代码,如果一个异常没有与任何的 excep 匹配,那么这个异常将会传递给上层的 try 中。
发生异常时执行的代码。(没有发生异常时,此部分会被忽略)
}
else:{
没有异常时执行的代码
}
3)try-finally:try-finally 语句无论是否发生异常都将执行最后的代码。
架构:
try:{#一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
执行代码。(如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。)
}
except:{#异常类型符合时,将执行下面代码,如果一个异常没有与任何的 excep 匹配,那么这个异常将会传递给上层的 try 中。
发生异常时执行的代码。(没有发生异常时,此部分会被忽略)
}
else:{
没有异常时执行的代码
}
finally:{
不管有没有异常都会执行的代码
}
4)抛出异常:raise:Python 使用 raise 语句抛出一个指定的异常。
语法:raise [Exception [, args [, traceback]]]
eg:
x = 10
if x > 5:
raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
执行以上代码会触发发异常:
Traceback (most recent call last):
File "test.py", line 3, in <module>
raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
Exception: x 不能大于 5。x 的值为: 10
3)预定义的清理行为:关键词 with 语句就可以保证诸如文件之类的对象在使用完之后一定会正确的执行他的清理方法:
eg:
with open("myfile.txt") as f:
for line in f:
print(line, end="")
以上这段代码执行完毕后,就算在处理过程中出问题了,文件 f 总是会关闭。