如何在python中处理与sys.argv []相关的错误?

时间:2015-05-20 07:39:37

标签: python argparse

我写了一个简单的代码来打开一个读取数据帧的csv文件。代码能够打印数据帧。为了使这个代码更具交互性,我集成了一个功能,以便在sys.argv [1]不成立时它可能引发错误。不幸的是,在我努力寻找解决方案之后,我无法正确地整合"引发异常部分"。代码是下面给出的(虽然,我已经尝试了很多本机代码,但在这里我只粘贴了我为实现目标所做的最后一次更改(即如果sys.argv [1]不为True则引发异常) :谢谢

class My_csv_class(object):

    def __init__(self):

        self.csv_path = sys.argv[1]

    def csv_open(self):

        try:
            self.r = pd.read_csv(self.csv_path)
        except IndexError:
            print "Cannot open the file: "
        else:
            return self.r 

    def print_r(self):

        self.r


if __name__=="__main__":

    a = My_csv_class()
    a.csv_open()
    a.print_r()

3 个答案:

答案 0 :(得分:2)

__init__方法引发了异常。您可以将try..except放在实例创建周围:

if __name__=="__main__":
    try:
        a = My_csv_class()
    except IndexError:
        print "You did not specify a file"
        sys.exit(1)
    a.csv_open()
    a.print_r()

但是,处理此类代码 之外的命令行问题更为常见。在没有命令行的情况下保持代码可重用,并将所有“脚本任务”放在__main__保护代码中:

class My_csv_class(object):
    def __init__(self, filename):
        self.csv_path = filename

    def csv_open(self):
        self.r = pd.read_csv(self.csv_path)

    def print_r(self):
        self.r

if __name__=="__main__":
    try:
        filename = sys.argv[1]
    except IndexError:
        print "You did not specify a file"
        sys.exit(1)

    a = My_csv_class(filename)
    a.csv_open()
    a.print_r()

答案 1 :(得分:0)

您可以使用以下

if os.path.isfile(sys.argv[1]): #if this is  a file 
   #do your work
你的代码中的

import os
import sys


class My_csv_class(object):

     def __init__(self):

         self.csv_path = sys.argv[1]

     def csv_open(self):

         if os.path.isfile(self.csv_path):
            self.r = pd.read_csv(self.csv_path)
         else:
            return self.r 

     def print_r(self):

         self.r


if __name__=="__main__":

   a = My_csv_class()
   a.csv_open()
   a.print_r()

答案 2 :(得分:0)

argparse旨在使您的命令行解析更容易。

class My_csv_class(object):

    def __init__(self, csv_path):
        self.csv_path = csv_path

    def csv_open(self):
        try:
            self.r = pd.read_csv(self.csv_path)
        except IndexError:
            print "Cannot open the file: "
        else:
            return self.r 


if __name__=="__main__":
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("-f", "--filepath",
                        required=True,
                        default=None,
                        help="Path to target CSV file")
    args = parser.parse_args()
    a = My_csv_class(args.filepath)
    a.csv_open()
    a.print_r()

使用required=True,如果未给出选项,解析器将自动引发错误。