BrightXiong 发表于 2023-3-17 19:47:47

异常-下

>>> # 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 ]:
    异常处理代码
]:
    异常处理代码]*
[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
到这里来
>>>

未泯 发表于 2023-3-17 19:49:16

{:7_146:}

歌者文明清理员 发表于 2023-3-17 19:57:27

本帖最后由 歌者文明清理员 于 2023-3-17 20:00 编辑

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

另外给你提个建议,代码用代码标签发布
页: [1]
查看完整版本: 异常-下