发布于2020-02-28 12:26 阅读(871) 评论(0) 点赞(23) 收藏(5)
python 程序在运行期检测到的错误称为 “异常”,大多数异常都不会被程序主动处理,最终会产生一个错误信息致使程序终止运行或者崩溃。要保证程序如预期的正常运行,就需要主动去处理一些可预见的 “异常” ,Python 中可以用 try … except … finally 来捕获异常并做处理。
异常包含:1)python 内建异常; 2)自定义异常,下面会逐一介绍这两类异常。
import sys
try: # try 语句
print("执行期望的代码")
except OSError as err: # 捕获系统相关异常并做处理
print("捕获OSError相关错误, error: ", err)
except (RuntimeError, TypeError, NameError): # 一个 except 中包含多个异常
print("捕获***错误")
except: # 通配符,捕获所有的异常。慎用此法,因为它会轻易隐藏一个实际的程序错误, 可以使用这种方法打印一条错误信息,然后重新抛出异常(允许调用者处理这个异常)
print("捕获未知错误:", sys.exc_info()[0])
raise # 手动抛出一个异常,终止程序
else: # else 语句用于当 try 语句没有异常时,如果需要执行一些代码,可以加上 else 语句,此时会执行 else 语句中的代码
# 使用 else 子句比在 try 子句中附加代码要好,因为这样可以避免 try … except 意外的截获本来不属于它们保护的那些代码抛出的异常。
print("没有错误,执行")
finally: # 不管有没有错误都会执行 finally 中的代码
print("不管有没有错,都执行finally")
''' 调用 k8s api 进行删除pv资源示例 ''''
def delete(self, pv_name):
"""
删除 PersistentVolume 函数
:param pv_name: 要删除的PV名字
:return:
Ture: 删除成功
False 删除失败
"""
try:
# 判断 pv 是否在集群中存在
resp = self.corev1_api.read_persistent_volume(name=pv_name)
logger.info("pv: %s confirm exist, res: %s\n" % (pv_name, resp))
try:
# 存在,执行删除动作
res = self.corev1_api.delete_persistent_volume(name=pv_name)
res = res.to_dict()
logger.info("pv: %s delete succeed\n" % pv_name)
return True, res
except ApiException as e:
logger.error("Exception when calling CoreV1Api->delete_persistent_volume: %s\n" % e)
return False, "Error delete pv, %s" % e
except ApiException as e:
if e.status == 404:
logger.error("pv: %s NotExist, cant delete\n" % pv_name)
return False, "NotExist, 当前PV: %s, 集群中不存在" % pv_name
logger.error("Exception when calling CoreV1Api->read_persistent_volume: %s\n" % e)
return False, "Error read pv, %s" % e
BaseException # 新的所有异常的基类,都由此衍生而来
+-- SystemExit # 解释器请求退出
+-- KeyboardInterrupt # Ctrl+C 被按下时,程序被强行终止
+-- GeneratorExit # 生成器发生异常通知退出
+-- Exception # 常规错误的基类,继承 BaseException
+-- StopIteration # 迭代器没有更多的值错误
+-- StopAsyncIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError # 对象没有要使用的属性错误
+-- BufferError
+-- EOFError
+-- ImportError # 导入模块/对象失败报错
| +-- ModuleNotFoundError
+-- LookupError # 无效数据查询的基类
| +-- IndexError
| +-- KeyError
+-- MemoryError # 内存溢出报错
+-- NameError # 使用一个还未赋值对象的变量错误
| +-- UnboundLocalError
+-- OSError # 系统相关的错误
| +-- BlockingIOError
| +-- ChildProcessError
| +-- ConnectionError
| | +-- BrokenPipeError
| | +-- ConnectionAbortedError
| | +-- ConnectionRefusedError
| | +-- ConnectionResetError
| +-- FileExistsError # 试图创建一个已经存在的文件错误
| +-- FileNotFoundError # 试图打开一个不存在的文件错误
| +-- InterruptedError
| +-- IsADirectoryError #
| +-- NotADirectoryError #
| +-- PermissionError # 文件权限错误
| +-- ProcessLookupError
| +-- TimeoutError # 超时报错
+-- RuntimeError # 一般的运行错误
+-- SyntaxError # 语法错误
| +-- IndentationError # 缩进错误
| +-- TabError # Tab 与 空格混用错误
+-- SystemError # 解释器请求退出
+-- TypeError # 传入的对象类型与要求不符
+-- ValueError # 传入一个调用者不期望的值,一般就是编码转换的错误
| +-- UnicodeError # Unicode 相关的错误
| +-- UnicodeDecodeError # Unicode 解码时的错误
| +-- UnicodeEncodeError # Unicode 编码时的错误
| +-- UnicodeTranslateError # Unicode 转换时的错误
+-- Warning # 警告的基类
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
+-- ResourceWarning
作用:主动抛出异常并终止程序
格式:raise 异常名称(“异常描述”)
raise RuntimeError("example error")
当程序运行时内建的异常无法满足需求或者想自定义一些专属的异常,就需要进行自定义异常。
Python 异常继承关系:
我们可以看到 python 的异常有个大基类 BaseException,然后是异常基类 Exception,所以我们自定义类也必须继承 Exception 基类。
代码示例:
''' 自定义一个异常类 CustomError '''
class CustomError(Exception):
def __init__(self,ErrorInfo):
super().__init__(self) # 初始化继承的 Exception 父类
# 也可以去掉,如果去掉则 Exception 默认的 __init__() 被覆盖
self.errorinfo = ErrorInfo
def __str__(self): # __str__方法来定义需要抛出的异常信息,此时接受 raise 传入的异常信息
return self.errorinfo
if __name__ == '__main__':
try:
raise CustomError('客户异常') # 手动抛出自定义的异常
except CustomError as e: # except 中捕获抛出的异常并做处理
print(e)
作者:美美哒
链接:https://www.pythonheidong.com/blog/article/235876/2d599362c9a091f111ee/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!