前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python代码异常

Python代码异常

作者头像
星哥玩云
发布2022-09-08 12:59:30
2560
发布2022-09-08 12:59:30
举报
文章被收录于专栏:开源部署

一、异常

1、try……except……

在程序运行过程中,总会遇到各种各样的错误。有的错误是编程代码有问题造成的,这种错误称为BUG,BUG是必须要修复。有的错误是用户输入造成的,这种错误可以通过检查用户的输入来做响应处理。还有一种错误是完全无法在程运行过程中检测的。比如写文件的时候,磁盘满了,就写不进去。比如从网络中抓取数据,突然断网了,就获取不到了。通常这种情况称为异常,在程序中必须要处理,否则程序会因为各种问题个结束

遇到错误最原始的解决方案

事先约定一个错误代码,这样就知道是否有错误,在系统提供的调用中非常常用

代码语言:javascript
复制
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">checkUser</span><span class="hljs-params">(account, passwd)</span>:</span>
    <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> account:
        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>
    <span class="hljs-keyword">elif</span> passwd != <span class="hljs-string">"1"</span>:
        <span class="hljs-keyword">return</span> <span class="hljs-number">-2</span>
ret = checkUser(<span class="hljs-string">"sunck"</span>, <span class="hljs-string">"666"</span>)

需求

当程序遇到错误代码时,不让程序结束,而是越过错误继续向下执行

代码语言:javascript
复制
<span class="hljs-comment"># 错误代码</span>
<span class="hljs-comment"># num = 0</span>
<span class="hljs-comment"># print(1 / num)</span>

格式

代码语言:javascript
复制
try:
    语句t
except 错误表示码1 as e:
    语句1
except 错误表示码2 as e:
    语句2
……
except 错误表示码n as e:
    语句n

作用

用来检测“语句t”的错误,从而让except语句捕获异常进行处理

逻辑

a、如果“语句t”执行时发送异常,就跳回到执行try并执行一个匹配该异常的except子句,异常处理结束就结束整个try……except语句(除非处理异常时又引发了新的异常)

b、如果“语句t”执行时发送异常,但是却没有匹配的except子句,异常提交到上一级try,或者到程序的最上层

c、如果“语句t”执行时没有异常,就不会匹配except子句。结束整个try……except……语句继续向下执行

说明

e:异常的描述

基本使用

代码语言:javascript
复制
<span class="hljs-keyword">try</span>:
    <span class="hljs-number">1</span> / <span class="hljs-number">0</span>
<span class="hljs-keyword">except</span> ZeroDivisionError <span class="hljs-keyword">as</span> e:
    print(<span class="hljs-string">"----------1"</span>)
    print(e, type(e))
    print(str(e))
<span class="hljs-keyword">except</span> KeyError <span class="hljs-keyword">as</span> e:
    print(<span class="hljs-string">"----------2"</span>)

特殊使用

使用except而不带任何错误表示码,捕获任意的异常

代码语言:javascript
复制
<span class="hljs-keyword">try</span>:
    <span class="hljs-number">1</span> / <span class="hljs-number">0</span>
<span class="hljs-keyword">except</span>:
    print(<span class="hljs-string">"有错误"</span>)

使用except而带有多种错误表示码,同时匹配多种异常,只要符合其中之一即可捕获

代码语言:javascript
复制
<span class="hljs-keyword">try</span>:
    <span class="hljs-number">1</span> / <span class="hljs-number">0</span>
<span class="hljs-keyword">except</span> (ZeroDivisionError, KeyError, AttributeError) <span class="hljs-keyword">as</span> e:
    print(<span class="hljs-string">"------"</span>)

使用注意事项

python中的错误表示码实际上是类,所有的错误类都继承自BaseException,所以在使用时注意父类会将子类错误一网打尽

代码语言:javascript
复制
<span class="hljs-keyword">try</span>:
    <span class="hljs-number">1</span> / <span class="hljs-number">0</span>
<span class="hljs-keyword">except</span> BaseException <span class="hljs-keyword">as</span> e:
    print(<span class="hljs-string">"------1"</span>)
<span class="hljs-keyword">except</span> ZeroDivisionError <span class="hljs-keyword">as</span> e:
    print(<span class="hljs-string">"------2"</span>)

跨多层调用,main里调用f2,f2里调用f1,在f1里出错了,只需要再main里捕获就可以处理

代码语言:javascript
复制
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f1</span><span class="hljs-params">()</span>:</span>
    ret = <span class="hljs-number">1</span> / <span class="hljs-number">0</span>
    <span class="hljs-keyword">return</span> ret
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f2</span><span class="hljs-params">()</span>:</span>
    f1()
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span><span class="hljs-params">()</span>:</span>
    <span class="hljs-keyword">try</span>:
        f2()
    <span class="hljs-keyword">except</span> ZeroDivisionError <span class="hljs-keyword">as</span> e:
        print(<span class="hljs-string">"----------"</span>)

2、try……except……else

格式

代码语言:javascript
复制
try:
    语句t
except 错误表示码1 as e:
    语句1
except 错误表示码2 as e:
    语句2
……
except 错误表示码n as e:
    语句n
else:
    语句e

逻辑

a、如果“语句t”执行时发送异常,就跳回到执行try并执行一个匹配该异常的except子句,异常处理结束就结束整个try……except……else语句(除非处理异常时又引发了新的异常)

b、如果“语句t”执行时发送异常,但是却没有匹配的except子句,异常提交到上一级try,或者到程序的最上层

c、如果“语句t”执行时没有异常,就不会匹配except子句。如果有else语句则执行“语句e”,执行完则结束整个try……except……else语句继续向下执行

代码

代码语言:javascript
复制
try:
    1 / 0
except ZeroDivisionError as e:
    print("************")
else:
    print("---------")

3、try……except……finally

格式

代码语言:javascript
复制
try:
    语句t
except 错误表示码1 as e:
    语句1
except 错误表示码2 as e:
    语句2
……
except 错误表示码n as e:
    语句n
finally:
    语句f

作用

无论try中的语句是否发生异常,都将执行“语句f”

代码

代码语言:javascript
复制
try:
    1 / 1
except ZeroDivisionError as e:
    print("************")
finally:
    print("---------")
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、异常
    • 1、try……except……
      • 2、try……except……else
        • 3、try……except……finally
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档