def spam(divisor):
return 42 / divisor
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))
21.0
3.5
Traceback (most recent call last):
File "C:/Users/mary/PycharmProjects/test/zerodivide.py", line 7, in <module>
print(spam(0))
File "C:/Users/mary/PycharmProjects/test/zerodivide.py", line 2, in spam
return 42 / divisor
ZeroDivisionError: division by zero
当试图用一个数除以零时,就会发生 ZeroDivisionError
。
错误可以由 try
和 except
语句来处理。那些可能出错的语句被放在 try
子句中。如果错误发生,程序执行就转到接下来的 except
子句开始处。
def spam(divisor):
try:
return 42 / divisor
except ZeroDivisionError:
print('Error: Invalid argument.')
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))
21.0
3.5
Error: Invalid argument.
None
42.0
在函数调用中的 try
语句块中,发生的所有错误都会被捕捉。
在下面的程序中,做法有所不同,将 spam() 调用放在语句块中:
def spam(divisor):
return 42 / divisor
try:
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))
except ZeroDivisionError:
print('Error: Invalid argument.')
21.0
3.5
Error: Invalid argument.
print(spam(1))
从未被执行是因为,一旦执行跳到 except
子句的代码,就不会回到 try
子句,它会继续向下执行。
None 值
在 python 中有一个值成为 None
,它表示没有值。None
是 NoneType
数据类型的唯一值。
如果你希望变量中存储的东西不会与一个真正的值混淆,可以使用 None
值。
有一个使用 None
的地方就是 print()
的返回值。print()
函数在屏幕上显示文本,但它不需要返回任何值,这和 len()
和 input()
不同。但既然所有函数调用都需要求值为一个返回值,那么 print()
就返回 None
。
>>> spam = print("hello")
hello
>>> None == spam
True
对于所有没有 return
语句的函数定义,python 都会在末尾加上 return None
。
而且,如果使用不带值的 return
语句,那么就返回 None
。