찾다

 >  Q&A  >  본문

Python获取命令行参数后进行处理的时候为什么不能进到else中,请大神赐教哈

# 获取命令行参数
opts,args = getopt.getopt(sys.argv[1:],"hi:n:o:s:d:")
#function to show help information when user input "-h"
def usage():
    print ("sys.argv[0]: ' -i p_case_dir -n p_case_id_str -o p_out_dir -s p_src_conn -d p_dst_conn'")
    print ("sys.argv[0]: ' -h'")

for op,value in opts:
    if(op == "-i"):
        p_case_dir =  value
    elif(op == "-n"):
        p_case_id_str = value
    elif(op == "-o"):
        p_out_dir = value
    elif(op == "-s"):
        p_src_conn = value
    elif(op == "-d"):
        p_dst_conn = value
    elif(op == "-h"):
        usage()
        os._exit(0)
    else:
        usage()
        os._exit(0)
        
迷茫迷茫2848일 전761

모든 응답(2)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-18 09:46:25

    실제 이유는 매개변수 없이 스크립트를 실행할 때 opts, args = getopt.getopt(sys.argv[1:], "hi:n:o:s:d:")에서 얻은 opts = []이 빈 list이고 위에서 언급한 것처럼 예외 오류를 보고하지 않지만 For an 빈 list, 귀하의 for op,value in opts: 문장은 for 루프에 들어가지 않으며 자연스럽게 else의 논리를 실행하지 않습니다.

    테스트를 해보자:

    으아악

    따라서 코드는 다음과 같이 다시 작성되어야 합니다.

    으아악

    또한 Python 2.7부터는 더욱 유연하고 편리한 argparse이 표준 라이브러리에 포함되어 있으므로 getopt
    공식 홈페이지 매뉴얼

    을 대체하는 것이 좋습니다.

    회신하다
    0
  • 迷茫

    迷茫2017-04-18 09:46:25

    다음 문장이 이미 예외를 보고했기 때문입니다.

    으아악

    예외를 사전에 포착해야 합니다.

    으아악

    그런 다음 if/elif/else에서 일반 매개변수 입력을 처리합니다.

    회신하다
    0
  • 취소회신하다