当前位置: 首页 > article >正文

Python--一言不合就try一下?

这里需要注意的是错误是Error,异常是Exception。 异常是可以被捕捉的,被处理的,但是错误是不能被捕获的。异常官方文档

我们一般情况下,习惯性的叫pycharm控制台给出的红色字体叫报错。其实不然,是异常。

异常产生: raise语句显示的抛出异常 Python解释器自己检测到的异常,并引发它 

print(1/0)
"""
 print(1/0)
ZeroDivisionError: division by zero
"""
def fuc(num):

    if num == 1:
        raise Exception('错了呢')
fuc(1)
"""
    raise Exception('错了呢')
Exception: 错了呢
"""

看示例一中带有Error,实则并非正真的错误,它是由一层一层代码结构继承下来的,可以理解为继承自异常类下的Error类名。 

捕获异常

try:
    print("正在捕捉")
    print(1/0)
except ZeroDivisionError:
    print("不可以除0")
"""
正在捕捉
不可以除0
"""

多个except

try:
    n = int(input('请输入一个数字:'))
    print(n)
except ValueError:
    print("输入整数啦")
except KeyError:
    print("key not found")
except FileNotFoundError:
    print("file not found")

:::danger 在try后面,可以接多个except,在异常后,会精准输出对应的异常提示。 :::

except与打印指定信息

正常情况下,except可以捕捉错误类型,且打印指定的错误信息 

那么有没有一种方法可以直接访问捕捉异常呢,俗称:只想捕捉异常并直接打印对应信息。肯定有的 

class Myexception(Exception):
    def __init__(self,code,message):
        self.code = code
        self.message = message

try:
    raise Myexception(code="404",message="Not")
except ValueError:
    print("输入整数啦")
except KeyError:
    print("key not found")
except FileNotFoundError:
    print("file not found")
except:
    print("我啥都捕捉")
"""
我啥都捕捉
"""

不论在何时都可以使用except。这里写的复杂例子后续还有其他内容要说。 Myexception继承自Exception,并且初始化了。这跟源码有关系。

不同层次的打印信息

正常情况下我们是直接捕捉错误并且print的。 还有另一种方式:

class Myexception(Exception):
    def __init__(self,code,message):
        self.code = code
        self.message = message

try:
    raise Myexception(code="404",message="Not")
except ValueError:
    print("输入整数啦")
except KeyError:
    print("key not found")
except FileNotFoundError:
    print("file not found")
except Exception as e:
    print(e)
    print(e.code,e.message)
    print("我就是猖狂,我全部揽下来")

那就是as e的方式,我们需要在抛出异常的时候传入初始化参数,也就是报错提示,随后捕捉的时候使用.code,.message的方式输出。这里的e,也可以是其他的东西,类似于变量。

finally

可以理解为只要写了它,不论如何都会执行先关语句。在退出try的时候总是会执行。

try:
    f  = open('test')
except ValueError as e:
    print(e.args,e.__dict__,sep='||')
except Exception as e:
    print(e.args,e.__dict__,sep='||')
finally:
    print("不论怎么样,我都会执行")
"""
(2, 'No such file or directory')||{}
不论怎么样,我都会执行
"""

可以看到即使异常了,也还是会执行的。sep的用法,请看零散小方法

else

在没有异常的时候执行这个语句

try:
    print(1//1)
except ValueError as e:
    print(e.args,e.__dict__,sep='||')
except Exception as e:
    print(e.args,e.__dict__,sep='||')
else:
    print("No Exception,action")
"""
1
No Exception,action
"""

finally和else

try:
    print(1//1)
except ValueError as e:
    print(e.args,e.__dict__,sep='||')
except Exception as e:
    print(e.args,e.__dict__,sep='||')
else:
    print("No Exception,action")
finally:
    print("Start Action , Show Time")
"""
1
No Exception,action
Start Action , Show Time
"""

这二者可以结合使用,此外你也可以在这其中加入一系列的代码,例如for循环,if判断等

小结

1、如果try中语句执行时发生异常,搜索except子句,并执行第一个匹配该异常的except子句 2、如果try中语句执行时发生异常,却没有匹配的except子句,异常将被递交到外层的try,如果外层不处理这个异常,异常将继续向外层传递。如果都不处理该异常,则会传递到最外层,如果还没有处理,就终止异常所在的线程 3、如果在try执行时没有发生异常,如有else子句,可执行else子句中的语句 4、无论try中是否发生异常,finally子句最终都会执行


http://www.kler.cn/a/18406.html

相关文章:

  • 随手记:简单实现纯前端文件导出(XLSX)
  • Java的dto,和多表的调用
  • 【再谈设计模式】抽象工厂模式~对象创建的统筹者
  • 开源vs闭源:你更看好哪一方?
  • PostgreSQL 开启密码验证插件
  • 信号量和线程池
  • 论文ai生成-一键生成论文的软件
  • 二维数组---C语言(行列抽象思维)
  • 极光笔记 | 极光推出“运营增长”解决方案,开启企业增长新引擎
  • docker网卡的IP地址修改
  • openGL入门
  • 地狱级的字节跳动面试,6年测开的我被按在地上摩擦.....
  • 双目测距--3 双目标定
  • 回调函数_回顾
  • 远程桌面连接出现了内部错误怎么解决?
  • 20230506在Ubuntu22.04下使用python3下载合并ts切片
  • FTP Entering Extended Passive Mode
  • 为什么越来越多的设计师开始用云渲染来渲图?
  • 关于maven
  • Hive为什么要分桶?
  • 【数据结构】Treap树堆
  • django:django2配置websocket
  • 删除的文件怎样恢复?实用的方法
  • TomcatServletHTTP
  • 【Linux】项目自动化构建工具 —— make/Makefile
  • 【Java|golang】1419. 数青蛙