系統交互摘要

一、程序接口

當我們需要在命令行或其他編程語言中運行 .py 文件並傳入指定參數,編寫程序接口的重要性就不言而喻了。傳統的 Python 使用系統內置庫 Argparse 實現接口定義。Google 於 2017 年底開源了從 TensorFlow 中衍變而來,對 Argparse 的簡易封裝,使用更爲簡便。以下便是相關代碼實現:

import sys
from absl import flags
from absl import app

flags.DEFINE_string('A','String of A.','Help of A.')
flags.DEFINE_integer('B',7,'Help of B.')
FLAGS = flags.FLAGS

def main(*args):
    print('Param A = %s'%FLAGS.A)
    sys.stdout.write('Param B = %s'%FLAGS.B)

if __name__=='__main__':
	#flags.mark_flag_as_required("A")
    app.run(main)

編寫一個新的 .py 文件,命名爲“test.py”,在命令行將地址調到相應目錄下,輸入以下命令,看看回應:

>>> test.py
	Param A = String of A.
	Param B = 7

>>> test.py --A='New_String_of_A.'
	Param A = 'New_String_of_A.'
	Param B = 7

>>> test.py --A='New_String_of_A.' --B=4
	Param A = 'New_String_of_A.'
	Param B = 4

>>> test.py -help
 -- A: Help of A.
    (default: 'String of A.')
 -- B: Help of B.
    (default: '7')
    (an integer)

使用原始的 Argpase 實現同樣的功能,代碼如下:

import sys
import argparse

parser = argparse.ArgumentParser(description='')
parse.add_argument('--A', type=str, default='String of A.', help='Help of A.')
parse.add_argument('--B', type=int, default='String of A.', help='Help of B.')
args = parser.parse_args()

def main():
    print('Param A = %s'%args.A)
    sys.stdout.write('Param B = %s'%args.B)

if __name__=='__main__':
    main()

二、異常處理

系統內置 Error

異常類名 描述
Exception 所有異常類的基類
AttributeError 對象 obj 沒有指定成員時引發
EOFError 一個 “end of file” 到達控制檯或文件輸入引發錯誤
IOError 輸入/輸出操作(如打開文件)失敗引發錯誤
IndexError 索引超出序列範圍引發錯誤
KeyError 請求一個不存在的集合或字典關鍵字引發錯誤
KeyboardInterrupt 用戶按 Ctrl - c 中斷程序引發錯誤
NameError 使用不存在的標識符引發錯誤
StopIteration 下一次遍歷的元素不存在時引發錯誤
TypeError 發送給函數的參數類型不正確引發錯誤
ValueError 函數參數值非法時引發錯誤
ZeroDivisionError 除數爲 0 引發錯誤

自定義 Error

class UserError(Exception):
	pass
raise UserError('This is the error you defined.')

三、運維日誌

import logging

# 日誌基本設置
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p"
logging.basicConfig(filename='my.log', level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT)

# 導出到日誌
logging.debug("This is a debug log.")
logging.info("This is a info log.")
logging.warning("This is a warning log.")
logging.error("This is a error log.")
logging.critical("This is a critical log.")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章