finally
为了确保某些代码运行,不管发生什么错误,都可以使用最终语句。最后一个语句被放置在一个尝试try/except语句的底部。最后语句中的代码总是在try中执行代码后运行,也可能在except中执行。
try:
print("Hello")
print(1 / 0)
except ZeroDivisionError:
print("0不能做分母")
finally:
print("这条代码运行是必须的")
结果:
>>>
Hello
0不能做分母
这条代码运行是必须的
>>>
这段代码的输出结果是:
try:
print(1)
except:
print(2)
finally:
print(3)
A1 3
B1
C1 2 3
D3
finally
finally 语句中的代码即使在前面一个块中未发生异常时也会运行。
try:
print(1)
print(10 / 0)
except ZeroDivisionError:
print(var)
finally:
print("最终被执行")
结果:
>>>
1
最终被执行
ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred
NameError: name 'var' is not defined
(在处理上面错误时候,另一个错误发生,
名称错误:没有var 没有定义过)
>>>
抛出异常
可以使用 raise语句来抛出异常。
print(1)
raise ValueError
print(2)
结果
>>>
1
ValueError
>>>
您需要指定引发异常的类型。
在执行此代码时发生哪些错误?
try:
print(1 / 0)
except ZeroDivisionError:
raise ValueError
AValueError
BZeroDivisionError
CZeroDivisionError and ValueError
Dnone
异常
可以用给出详细信息的参数来引发异常。
例如:
name = "123"
raise NameError("Invalid name!")
结果:
>>>
NameError: Invalid name!
>>>
如果输入为负值,填充以引发ValueError异常。
num = input(":")
if float(num)
0:
ValueError("负数!")
异常
在type/except块中,可以使用不带参数的提升语句重新引发任何异常。
例如:
try:
num = 5 / 0
except:
print("一个错误发生")
raise
结果:
>>>
一个错误发生
ZeroDivisionError: division by zero
>>>
可以在 except语句外用 raise语句吗?
A,No
B,Yes