镇江市建设局网站,绵阳网站设计制作,网站代备案公司名称,推广资源整合平台Python3 错误和异常
作为 Python 初学者#xff0c;在刚学习 Python 编程时#xff0c;经常会看到一些报错信息#xff0c;在前面我们没有提及#xff0c;这章节我们会专门介绍。
Python 有两种错误很容易辨认#xff1a;语法错误和异常。
Python assert#xff08;断…Python3 错误和异常
作为 Python 初学者在刚学习 Python 编程时经常会看到一些报错信息在前面我们没有提及这章节我们会专门介绍。
Python 有两种错误很容易辨认语法错误和异常。
Python assert断言用于判断一个表达式在表达式条件为 false 的时候触发异常。 标准异常如下列表
异常名称描述Exception所有异常的基类StopIteration当一个迭代器的 next()方法不指向任何对象时引发SystemExit由 sys.exit()函数引发StandardError除了StopIteration异常和SystemExit所有内置异常的基类ArithmeticError数值计算所发生的所有错误的基类OverflowError当数字类型计算超过最高限额引发FloatingPointError当一个浮点运算失败时触发ZeroDivisonError当除运算或模零在所有数值类型运算时引发AssertionError断言语句失败的情况下引发AttributeError属性引用或赋值失败的情况下引发EOFError当从 raw_input() 与 input() 函数输入到达文件末尾时触发ImportError当一个 import 语句失败时触发KeyboardInterrupt当用户中断程序执行通常是通过按 Ctrlc 引发LookupError所有查找错误基类IndexErrorKeyError当在一个序列中没有找到一个索引时引发当指定的键没有在字典中找到引发NameError当在局部或全局命名空间中找不到的标识引发UnboundLocalErrorEnvironmentError试图访问在函数或方法的局部变量时引发但没有值分配给它。Python环境之外发生的所有异常的基类。IOErrorIOError当一个输入/输出操作失败如打印语句或 open()函数试图打开不存在的文件时引发操作系统相关的错误时引发SyntaxErrorIndentationError当在Python语法错误引发没有正确指定缩进引发。SystemError当解释器发现一个内部问题但遇到此错误时Python解释器不退出引发SystemExit当Python解释器不使用sys.exit()函数引发。如果代码没有被处理解释器会退出。当操作或函数在指定数据类型无效时引发ValueError在内置函数对于数据类型参数的有效类型时引发但是参数指定了无效值RuntimeError当生成的错误不属于任何类别时引发NotImplementedError当要在继承的类来实现抽象方法实际上没有实现时引发此异常
在Python中断言
断言是一种理智检查当程序的测试完成你可以打开或关闭。 断言的最简单的方法就是把它比作 raise-if 语句 (或者更准确加 raise-if-not 声明). 一个表达式进行测试如果结果出现 false将引发异常。 断言是由 assert 语句在Python中新的关键字在Python1.5版本中引入使用的关键字。 程序员常常放置断言来检查输入的有效或在一个函数调用后检查有效的输出。
assert 语句当它遇到一个断言语句Python评估计算之后的表达式希望是 true 值。如果表达式为 falsePython 触发 AssertionError 异常。
断言的语法是 -
assert Expression[, Arguments] 如果断言失败Python使用 ArgumentExpression 作为AssertionError异常的参数。AssertionError异常可以被捕获并用 try-except语句处理类似其他异常但是如果没有处理它们将终止该程序并产生一个回溯。
示例这里是一个把从开氏度到华氏度的温度转换函数。
#!/usr/bin/python3
def KelvinToFahrenheit(Temperature):assert (Temperature 0),Colder than absolute zero!return ((Temperature-273)*1.8)32print (KelvinToFahrenheit(273))
print (int(KelvinToFahrenheit(505.78)))
print (KelvinToFahrenheit(-5))当执行上面的代码它产生以下结果 -
32.0
451
Traceback (most recent call last):
File test.py, line 9, in
print KelvinToFahrenheit(-5)
File test.py, line 4, in KelvinToFahrenheit
assert (Temperature 0),Colder than absolute zero!
AssertionError: Colder than absolute zero!except子句中无异常
也可以使用 except 语句定义如下无异常声明如下 -
try:You do your operations here......................
except:If there is any exception, then execute this block.......................
else:If there is no exception then execute this block. except子句与多个异常
也可以使用相同的 except 语句来处理多个异常具体如下 -
try:You do your operations here......................
except(Exception1[, Exception2[,...ExceptionN]]]):If there is any exception from the given exception list, then execute this block.......................
else:If there is no exception then execute this block. 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()使用 else 子句比把所有的语句都放在 try 子句里面要好这样可以避免一些意想不到而 except 又无法捕获的异常。
异常处理并不仅仅处理那些直接发生在 try 子句中的异常而且还能处理子句中调用的函数甚至间接调用的函数里抛出的异常。例如: def this_fails():x 1/0 try:this_fails()except ZeroDivisionError as err:print(Handling run-time error:, err)Handling run-time error: int division or modulo by zerotry-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。 以下实例中 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(这句话无论异常是否发生都会执行。)