python中异常处理的两种方式,python处理异常的4种方式
目录1。什么是例外?2.python标准异常3。异常处理3.1 try/except 3.2 try-finally语句3.3异常4的参数。触发异常4.1引发4.2用户定义的异常
1.什么是异常?异常是一个事件,它会在程序执行过程中发生,影响程序的正常执行。
一般来说,当Python不能正确处理程序时,就会出现异常。
是一个异常Python对象,表示有错误。
当Python脚本出现异常时,我们需要捕捉并处理,否则程序会终止执行。
Python提供了两个非常重要的函数来处理python程序运行中的异常和错误。您可以使用这个函数来调试python程序。
异常处理断言
2.python标准异常BaseException所有异常的基类
系统退出请求的退出解释程序。
键盘中断用户中断执行(通常输入C)
异常一般错误基类
StopIteration迭代器没有更多值。
GeneratorExit生成器(generator)有一个异常通知退出。
错误标准的所有内置标准异常的基类。
算术错误是所有数值计算错误的基类。
浮点错误浮点计算错误
溢出错误数值运算超过最大限制。
ZeroDivisionError除以(或模)零(所有数据类型)
AssertionError断言语句失败。
错误对象没有此属性。
EOFError没有内置输入,达到eof标志。
Error环境错误操作系统错误的基类。
IOError I/o操作失败。
操作系统错误
WindowsError系统调用失败。
ImportError无法导入模块/对象。
lookup错误数据查询的基类无效
错误序列中没有这样的索引(index)
键映射中没有键。
内存内存溢出错误(对Python解释器不致命)
NameError对象未声明/初始化(无属性)
UnboundLocalError访问未初始化的局部变量。
错误弱引用错误试图访问已被垃圾收集的对象。
错误运行时常规运行时错误
NotImplementedError尚未实现该方法。
语法错误Python语法错误
缩进错误缩进错误
制表符错误制表符与空格混合
错误通用解释器系统错误
TypeError对类型的操作无效。
传入无效参数的错误。
错误Unicode错误Unicode相关错误
Unicode解码中的UnicodeDecoderError错误
Unicode encoding错误Unicode编码
UnicodeTranslateError Unicode转换错误
警告警告的基类。
弃用警告关于弃用功能的警告
FutureWarning对建筑未来语义变化的警告。
溢出警告关于自动提升为long的旧警告。
PendingDeprecationWarning警告将放弃该功能
可疑运行时行为的警告。
语法警告可疑语法的警告
用户警告由用户代码生成的警告
找不到FileNotFoundError文件。
3.异常处理
3.1 try/except捕捉异常可以使用try/except语句。
try/except语句用于检测try语句块中的错误,以便except语句可以捕获异常信息并对其进行处理。
如果你不想在异常发生时结束你的程序,只需在try中捕捉它。
语法:
下面的语法很简单try…except…else:
尝试:
语句#运行其他代码
除了名称:
语句#如果在try部分引发了“name”异常
除了名称,数据:
语句#如果抛出“名称”异常,则获取附加数据
否则:
语句#如果没有异常,try的工作原理是,当一个try语句启动时,python会在当前程序的上下文中对其进行标记,这样在出现异常时就可以回到这里。首先执行try子句,接下来会发生什么取决于执行过程中是否出现异常。
如果在执行try之后的语句时出现异常,python会跳回到try并执行第一个与异常匹配的except子句。处理异常时,控制流会通过整个try语句(除非在处理异常时引发了新的异常)。
如果在try之后的语句中出现异常,但是没有匹配的except子句,那么异常将被提交到上一级try或者程序的顶部(这将结束程序并打印默认的错误信息)。
如果执行try子句时没有出现异常,python将在else语句之后执行该语句(如果有else的话),然后通过整个try语句控制流程。
例子
下面是一个简单的例子,它打开一个文件,文件中的内容无一例外地被写入:
#!/usr/bin/python
# -*-编码:UTF-8 -*-
尝试:
fh=open(testfile , w )
Fh.write(这是一个测试异常的测试文件!)
除了IOError:
“打印”错误:文件未找到或无法读取
否则:
打印“内容成功写入文件”
fh.close()
上面的程序输出结果:
$ python test.py
成功写入内容文件。
$ cat testfile #查看已写入的内容
这是一个测试异常的测试文件!下面是一个简单的例子。它打开一个文件,文件中的内容被写入,但是该文件没有写权限,并且发生异常:
#!/usr/bin/python
# -*-编码:UTF-8 -*-
尝试:
fh=open(testfile , w )
Fh.write(这是一个测试异常的测试文件!)
除了IOError:
“打印”错误:文件未找到或无法读取
否则:
打印“内容成功写入文件”
fh.close()
在执行代码之前,为了方便测试,我们可以先去掉testfile文件的写权限。该命令如下所示:
chmod -w测试文件
然后执行上面的代码:
$ python test.py
错误:找不到文件或无法读取文件。使用不带任何异常类型的except。
您可以在没有任何异常类型的情况下使用except,如下例所示:
尝试:
正常运算
...
除了:
异常发生时,执行此代码。
...
否则:
如果执行这段代码没有异常,上面提到的try-except语句将捕获所有发生的异常。但这并不是一个好办法,我们也无法通过这个程序识别出具体的异常信息。因为它捕捉所有异常。
将except与多个异常类型一起使用。
还可以使用同一个except语句来处理多个异常消息,如下所示:
尝试:
正常运算
...
Exception1[,Exception2[,异常]]):
发生上述异常之一时,执行以下代码。
...
否则:
如果该代码没有异常执行
3.2 try-finally语句try-finally语句将执行最后一段代码,不管是否出现异常。
尝试:
句子
最后:
语句#总是在退出try时执行
提升实例
#!/usr/bin/python
# -*-编码:UTF-8 -*-
尝试:
fh=open(testfile , w )
Fh.write(这是一个测试异常的测试文件!)
最后:
“打印”错误:文件未找到或无法读取
#如果打开的文件没有可写权限,输出如下:
$ python test.py
错误:找不到文件或无法读取文件的相同示例也可以写成如下形式:
#!/usr/bin/python
# -*-编码:UTF-8 -*-
尝试:
fh=open(testfile , w )
尝试:
Fh.write(这是一个测试异常的测试文件!)
最后:
打印“关闭文件”
fh.close()
除了IOError:
当try块中抛出异常时,finally块代码立即执行。
执行完finally块中的所有语句后,将再次触发异常,并执行except块代码。
参数的内容与异常不同。
3.3异常的参数一个异常可以有参数,可以作为异常信息输出的参数。
您可以通过except语句捕获异常参数,如下所示:
尝试:
正常运算
...
ExceptionType除外,参数:
您可以在这里输出参数的值.变量收到的异常值通常包含在异常语句中。变量可以接收一个或多个元组形式的值。
元组通常包含错误字符串、错误号和错误位置。
例子
以下是单个异常的示例:
#!/usr/bin/python
# -*-编码:UTF-8 -*-
#定义函数
def temp_convert(var):
尝试:
return int(var)
除了值错误,参数:
“Print”参数不包含数字\n”参数
#呼叫功能
temp _ convert( XYZ );
以上程序结果如下:
$ python test.py
参数不包含数字。
基数为10的int()的文本无效:“xyz”
4.触发异常
4.1 raise我们可以自己使用raise语句来触发异常。
raise语法格式如下:
raise [Exception [,args [,traceback]]语句中的exception是exception(例如NameError)参数标准异常的类型之一,args是其自身提供的异常参数。
最后一个参数是可选的(实践中很少使用)。如果存在,就是追踪异常对象。
例子
异常可以是字符串、类或对象。Python内核提供的大多数异常都是实例化的类,它们是类实例的参数。
定义异常非常简单,如下所示:
定义函数名称(级别):
如果级别1:
引发异常(“无效级别!”,级别)
#异常触发后,下面的代码不会再执行。注意:为了捕捉异常,“except”语句必须抛出具有相同异常的类对象或字符串。
例如,如果我们捕获上述异常,则“except”语句如下:
尝试:
正常逻辑
例外情况除外,错误:
触发自定义异常
否则:
其他代码示例
#!/usr/bin/python
# -*-编码:UTF-8 -*-
#定义函数
def mye(级别):
如果级别1:
引发异常,“无效级别!”
#异常触发后,下面的代码不会再执行。
尝试:
Mye(0) #触发异常
例外情况除外,错误:
打印1,错误
否则:
打印2
执行上面的代码,输出结果是:
$ python test.py
1无效级别!
4.2用户定义的异常通过创建新的异常类,程序可以命名自己的异常。异常应该直接或间接地从异常类继承。
下面这个与RuntimeError相关的实例,在实例中创建了一个类,基类是RuntimeError,用来在触发异常时输出更多的信息。
在try语句块中,用户定义的异常后跟except block语句,变量E用于创建Networkerror类的实例。
类网络错误(RuntimeError):
def __init__(self,arg):
self.args=arg
#在定义了上面的类之后,可以按如下方式触发异常:
尝试:
引发网络错误(“错误的主机名”)
除了网络错误,e:
打印参数
来自
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。