#1 创建一个函数,用于接收用户输入的数字,并计算用户输入数字的和
from functools import reduce
a_list = []
def add(x, y):
return x+y
try:
while True:
a = input('请输入数字:')
if a == '':
break
else:
a_list.append(int(a))
print(reduce(add, a_list))
except Exception as e:
print('注意:请输入数字 %s' %e)
#2 创建一个函数,传入Ñ个整数,返回其中最大的数和最小的数
b_list = []
def compare(*args):
print('最大值:%s 最小值:%s' %(max(*args), min(*args)))
try:
while True:
b = input('请输入整数:')
if b == '':
break
else:
b_list.append(int(b))
compare(b_list)
except Exception:
print('注意:请输入数字')
#3 创建一个函数,传入一个参数N,返回ñ的阶乘
def factorial(x):
if x == 1 or x == 0:
return 1
else:
return x*factorial(x-1)
try:
while True:
c = input('请输入数字:')
if c == '':
break
else:
print(factorial(int(c)))
except Exception as e:
print('注意:请输入数字 %s' %e)
摘廖雪峰
# 通过配置,logging还可以把错误记录到日志文件里,方便事后排查。
import logging
def foo(s):
return 10/int(s)
def bar(s):
return foo(s) * 2
def main():
try:
bar('0')
except Exception as e:
logging.exception(e)
main()
print('END')
----logging
把print()替换为logging是第3种方式,和assert比,logging不会抛出错误,而且可以输出到文件:
import logging
s = '0'
n = int(s)
logging.info('n = %d' % n)
print(10 / n)
logging.info()就可以输出一段文本。运行,发现除了ZeroDivisionError,没有任何信息。怎么回事?
别急,在import logging之后添加一行配置再试试:
import logging
logging.basicConfig(level=logging.INFO)
看到输出了:
$ python err.py
INFO:root:n = 0
Traceback (most recent call last):
File "err.py", line 8, in <module>
print(10 / n)
ZeroDivisionError: division by zero
这就是logging的好处,它允许你指定记录信息的级别,有debug,info,warning,error等几个级别,当我们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debug和info就不起作用了。这样一来,你可以放心地输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息。
logging的另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如console和文件。