python 之异常处理

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

错误可以由 tryexcept 语句来处理。那些可能出错的语句被放在 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,它表示没有值。NoneNoneType 数据类型的唯一值。
如果你希望变量中存储的东西不会与一个真正的值混淆,可以使用 None 值。
有一个使用 None 的地方就是 print() 的返回值。print() 函数在屏幕上显示文本,但它不需要返回任何值,这和 len()input() 不同。但既然所有函数调用都需要求值为一个返回值,那么 print() 就返回 None

>>> spam = print("hello")
hello
>>> None == spam
True

对于所有没有 return 语句的函数定义,python 都会在末尾加上 return None
而且,如果使用不带值的 return 语句,那么就返回 None

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值