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

How to handle errors related to sys.argv[] in python ?

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

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()

您的 __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()

但是,在此类代码外部 处理命令行问题更为常见。让你的代码在没有命令行的情况下可以重复使用,并将你所有的 'script tasks' 放在 __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()

您可以使用以下

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()

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,如果没有给出选项,解析器会自动抛出一个错误。