鱼C论坛

 找回密码
 立即注册
查看: 3263|回复: 2

[学习笔记] 异常-下

[复制链接]
发表于 2023-3-17 19:47:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> # try-except 还可以跟 else 进行搭配,它的含义就是当 try 语句没有检测到任何异常的情况下,就执行 else 语句的内容:
>>> try:
...         1 / 0
... except:
...         print("逮到了~")
... else:
...         print("没逮到..")
...
逮到了~
>>> try:
...         1 / 1
... except:
...         print("带到了~")
... else:
...         print("没逮到")
...
1.0
没逮到

>>> # 跟 try-except 语句搭配的还有一个 finally,就是说无论异常发生与否,都必须要执行的语句:
>>> try:
...         1 / 0
... except:
...         print("逮到了")
... else:
...         print("没逮到")
... finally:
...         print("逮没逮到都一样!")
...
逮到了
逮没逮到都一样!

>>> # try:
    检测范围
except [expression [as identifier]]:
    异常处理代码
[except [expression [as identifier]]:
    异常处理代码]*
[else:
    没有触发异常时执行的代码]
[finally:
    收尾工作执行的代码]

>>> # 异常也是可以被嵌套的:
...         try:
...                 520 + "FishC"
...         except:
...                 print("内部异常!")
...         1 / 0
... except:
...         print("外部异常")
... finally:
...         print("收尾工作~")
...
内部异常!
外部异常
收尾工作~

>>> # 使用 raise 语句,我们可以手动的引发异常:
>>> raise ValueError("值不正确")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 值不正确

>>> # 还有一种叫异常链,在 raise 后面加个 from:
>>> raise ValueError("这样可不行") from ZeroDivisionError
ZeroDivisionError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 这样可不行

>>> # assert 语句只能引发一个叫 AssertionError 的异常。
>>> s = "FishC"
>>> assert s == "FishC" # 得到期待的结果,通过
>>> assert s != "FishC" # 没有得到期待的结果,引发异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>> # 利用异常来实现 goto
>>> try:
...         while True:
...                 while True:
...                         for i in range(10):
...                                 if i > 3:
...                                         raise
...                                 print(i)
...                         print("被跳过")
...                 print("被跳过")
...         print("被跳过")
... except:
...         print("到这里来")
...
0
1
2
3
到这里来
>>>
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-17 19:49:16 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-17 19:57:27 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-3-17 20:00 编辑

异常捕获至少有一个try和一个其他的。try是必须的
  1. try:
  2.     代码
复制代码
万一你怕发生zerodivisionerror,可以加上
  1. except ZeroDivisionError:
复制代码
如果你怕ValueError又怕ZeroDivisionError,可以这样
  1. except ZeroDivisionError:
  2.     代码
  3. except ValueError:
  4.     代码
复制代码
如果两种异常的操作一样,可以:
  1. except (错误1,错误2):
  2.     代码
复制代码
如果想捕获所有异常,可以:
  1. except:
  2.     代码
复制代码
如果想查看异常信息,可以:
  1. except 错误类型 as 错误信息的变量名:
  2.     print(repr(变量名))
复制代码
如果想捕获所有错误并查看信息,可以:
  1. except BaseException as 变量名:
复制代码
如果没有发生任何异常,可以用else:
  1. else:
  2.     代码
复制代码
不管有没有异常,finally都会执行:
  1. finally:
  2.     代码
复制代码


另外给你提个建议,代码用代码标签发布
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 04:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表