我一直在做"用Python编程自动化无聊的东西";当然,我不明白为什么作者说输出中None值的原因是事实,因为下面的函数中没有return语句。我以为";返回42/divideBy";是需要的返回语句。我是编程界的新手,所以我希望能有一个简单的解释。感谢
def div42by (divideBy):
try:
return 42/divideBy
except ZeroDivisionError:
print ('Error: You tried to divide by zero.')
print (div42by(2))
print (div42by(12))
print (div42by(0))
print (div42by(1))
(output)
21.0
3.5
Error: You tried to divide by zero.
None
42.0
您认为return 42/divideBy
是一个返回语句是正确的。
但当divideBy
等于零时,42/divideBy
部分将引发一个ZeroDivisionError
,这意味着return
从未实际运行过。相反,Python跳到print ('Error: You tried to divide by zero.')
行,并从那里继续运行。这一行之后没有return
语句,所以Python会自动返回None
。
另一种方法是,你的div42by
函数等效于:
def div42by(divideBy):
try:
result = 42 / divideBy
return result
except ZeroDivisionError:
print('Error: You tried to divide by zero.')
当CCD_ 11为零时,CCD_。
由于除以零会引发ZeroDivisionError,因此不执行return语句。该ZeroDivisionError随后被try->除了块。
事情发生的顺序是:
- python3尝试执行
42 / divideBy
(为零( 42 / divideBy
引发ZeroDivisionError- ZeroDivisionError被try捕获,除了
- 执行except块,使python3打印错误消息
- 该函数仍在继续,但已没有"代码">
- 未执行任何返回语句
要仍然获得返回,需要在下面有一个return语句try->除了但仍在函数内部。