第2章 2.4 捕获错误和问题
2022/4/10 23:43:45
本文主要是介绍第2章 2.4 捕获错误和问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、未对错误处理时:
import argparse import sys def main(number, other_number, output): result = number / other_number print(f'The result is {result}', file=output) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('-n1', type=int, help='A number', default=1) parser.add_argument('-n2', type=int, help='Another number', default=1) parser.add_argument('-o', dest='output', type=argparse.FileType('w'), help='output file', default=sys.stdout) args = parser.parse_args() main(args.n1, args.n2, args.output)
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ python task_with_error_handling_step1.py -n1 3 -n2 2
The result is 1.5
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ python task_with_error_handling_step1.py -n1 25 -n2 5
The result is 5.0
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ python task_with_error_handling_step1.py -n1 5 -n2 2 -o result.txt
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ cat result.txt
The result is 2.5
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ python task_with_error_handling_step1.py -n1 5 -n2 0 -o result.txt
Traceback (most recent call last):
File "task_with_error_handling_step1.py", line 16, in <module>
main(args.n1, args.n2, args.output)
File "task_with_error_handling_step1.py", line 5, in main
result = number / other_number
ZeroDivisionError: division by zero
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ cat result.txt
二、捕获错误和问题:
import argparse import sys import logging LOG_FORMAT = '%(asctime)s %(name)s %(levelname)s %(message)s' LOG_LEVEL = logging.DEBUG def main(number, other_number, output): logging.info(f'Dividing {number} between {other_number}') result = number / other_number print(f'The result is {result}', file=output) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('-n1', type=int, help='A number', default=1) parser.add_argument('-n2', type=int, help='Another number', default=1) parser.add_argument('-o', dest='output', type=argparse.FileType('w'), help='output file', default=sys.stdout) parser.add_argument('-l', dest='log', type=str, help='log file', default=None) args = parser.parse_args() if args.log: logging.basicConfig(format=LOG_FORMAT, filename=args.log, level=LOG_LEVEL) else: logging.basicConfig(format=LOG_FORMAT, level=LOG_LEVEL) try: main(args.n1, args.n2, args.output) except Exception as exc: logging.exception("Error running task") exit(1)
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ python task_with_error_handling_step4.py -n1 5 -n2 2
2022-04-10 23:09:39,507 root INFO Dividing 5 between 2
The result is 2.5
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ python task_with_error_handling_step4.py -n1 5 -n2 0
2022-04-10 23:09:43,978 root INFO Dividing 5 between 0
2022-04-10 23:09:43,979 root ERROR Error running task
Traceback (most recent call last):
File "task_with_error_handling_step4.py", line 28, in <module>
main(args.n1, args.n2, args.output)
File "task_with_error_handling_step4.py", line 10, in main
result = number / other_number
ZeroDivisionError: division by zero
(.venv) huangsiyangdeiMac:ch02 huangsiyang$
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ python task_with_error_handling_step4.py -n1 5 -n2 0 -l error.log
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ python task_with_error_handling_step4.py -n1 5 -n2 0 -l error.log
(.venv) huangsiyangdeiMac:ch02 huangsiyang$
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ cat error.log
2022-04-10 23:10:10,234 root INFO Dividing 5 between 0
2022-04-10 23:10:10,235 root ERROR Error running task
Traceback (most recent call last):
File "task_with_error_handling_step4.py", line 28, in <module>
main(args.n1, args.n2, args.output)
File "task_with_error_handling_step4.py", line 10, in main
result = number / other_number
ZeroDivisionError: division by zero
2022-04-10 23:10:15,561 root INFO Dividing 5 between 0
2022-04-10 23:10:15,561 root ERROR Error running task
Traceback (most recent call last):
File "task_with_error_handling_step4.py", line 28, in <module>
main(args.n1, args.n2, args.output)
File "task_with_error_handling_step4.py", line 10, in main
result = number / other_number
ZeroDivisionError: division by zero
三、日志的级别从不太关键到很关键分别为:DEBUG、INFO、WARNING、ERROR和CRITICAL。日志级别将设置记录消息所需的最小严重性。例如,如果严重性设置为WARNING,那么INFO的日志将不会记录。如下:
>>> import logging
>>> logging.basicConfig(level=logging.INFO)
>>> logging.warning('a warning message')
WARNING:root:a warning message
>>> logging.info('an intf message')
INFO:root:an intf message
>>> logging.debug('a debug message')
>>>
#最终的debug日志将不会显示,因为级别比info级低。
这篇关于第2章 2.4 捕获错误和问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?