Python的异常处理机制

1.错误和异常

错误   指的是代码的语法或者逻辑有错误

异常  指的是 由错误引起的,当出现错误,python解释器就无法处理程序,报出异常

出现异常,程序终止执行,如果不加以处理(异常捕捉),就会出现所谓的traceback 回溯 终止程序

2.python的异常处理

使用 python 异常处理机制,遇见异常,不会抛出不友好的traceback,而是有except决定抛出的信息

python的错误处理机制让你能够细致的控制与用户分享错误信息的程度,要分享多少信息由你决定。

1.try/except

def main():
    a=3/0
    print(a)
try:
    main()
except ZeroDivisionError:
    print("error")
 

 try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理,如果没有try/except,程序发生错误会终止运行,且抛出不友好的traceback,有了该语句,try语句发生错误,只会打印出“error”提示。

except捕捉 ZeroDivisionError 异常,也可以捕捉多种异常  except(Exception1[, Exception2[,...ExceptionN]]]):

except也可以不带任何异常类型,意味着只要try有错,就执行except后面的语句,但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息,因为它捕获所有的异常。

def main():
    a=3/0
    print(a)
try:
    main()
except:
    print("error")
 

 2.try/except/else/finally

def main():
    a=3/1
    print(a)
try:
    main()
except ZeroDivisionError:
    print("error")
else:
    print(main())
finally:
    print("always do this")

try语句内容有错,执行except语句,没有错误,执行else语句

3. 抛出异常 raise

python使用raise 语句 抛出一个指定的异常

raise NameError(“hello”)

有了raise 语句 就有异常,不管程序有没有异常,raise出现的地方就是异常 

def is_work_done():
    a=3/1
    return a

try:
    is_work_done()
    raise NameError("HELLO")
except:
    print("hello")
    raise  #raise的唯一参数是异常的类或者实例(也就是exception的子类)
如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。

 4 . 自定义异常类型

你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承,例如:

class MyError(Exception):
    def __init__(self,value):
        super().__init__() 
        self.value=value
try:
    raise MyError(9)
except MyError as e:
    print(e.value)

5. Exception 和 BaseException区别

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration...
      +-- StandardError...
      +-- Warning...

可以看出  BaseException 是最最基础的异常类,Exception 继承他,BaseException除了包含所有的Exception外还包含了SystemExitKeyboardInterruptGeneratorExit三个异常。这三个高级异常很少使用,我们在处理常见异常,只需要基于Exception即可。

6.  except Exception as e和 except Exception, e

两者意思相同 第一种写法推荐使用,第二种 python3 不支持

7. 常见的异常类型

 描述
BaseError所有异常的基类
SystemExit解释器请求退出
KeyBoardInterrupt用户中断执行(ctrl+c)
Exception常规错误的基类
AssertionError断句错误,当assert关键字后面的条件为假时,程序就会抛出
FileNotFoundError文件不存在
AttributeError属性错误,对象属性不存在的时候
IndexError索引错误,索引超出范围
KeyError在字典中查找一个不存在的关键字
NameError尝试访问一个不存在的变量
SyntaxError语法错误
TypeError类型错误,不同类型间的无效操作,1+“1”
ZeroDivisionError除0错误,分母为0
EOFError没有内建输入,到达EOF标记
IOError输入/输出操作失败
OSError操作系统错误
WindowsError系统调用失败
RuntimeError一般的运行时错误
IndentationError缩进错误
SystemError一般的解释器错误
TabError

Tab和空格混用

Warning

所有警告的基类

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8. 注意事项

  1. 只处理你知道的异常,避免捕获所有异常然后吞掉它们。
  2. 抛出的异常应该说明原因
  3. 如果有需要,切记使用finally来释放资源
  4. 如果有需要,请不要忘记在处理异常后做清理工作或者回滚操作

 

转载于:https://www.cnblogs.com/fayuzhang/p/11186145.html

Python异常处理机制是一种用来处理程序中出现的错误或异常情况的机制。它包括四个关键字:try、except、else和finally,以及raise语句。通过使用这些关键字,我们可以在程序中捕获并处理异常,从而避免程序崩溃。 在Python中,我们可以使用try和except关键字来捕获代码块中可能发生的异常。try块中的代码被称为被监视的代码,如果在执行try块的过程中发生了异常,那么程序会跳转到与异常类型匹配的except块,并执行其中的代码来处理异常。 除了except块,我们还可以使用else块来定义在try块中没有发生异常时需要执行的代码。这些代码在try块正常执行完毕后被执行。 另外,finally块是一个可选的块,在无论是否发生异常时都会被执行。通常情况下,我们可以在finally块中进行一些扫尾清理工作,比如关闭文件或释放资源。 如果一个异常没有与任何的except块匹配,那么这个异常将会传递给上层的try中。如果Python解释器找不到处理异常的except块,则程序运行终止,Python解释器也将退出。这就是Python异常处理机制的基本原理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python异常处理机制](https://blog.csdn.net/qq_42402854/article/details/128908594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python--异常处理机制](https://blog.csdn.net/weixin_53060366/article/details/130077074)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值