异常-下
>>> # 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
到这里来
>>> {:7_146:} 本帖最后由 歌者文明清理员 于 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]