Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理python中与sys.argv[]相关的错误?_Python_Argparse - Fatal编程技术网

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

如何处理python中与sys.argv[]相关的错误?,python,argparse,Python,Argparse,我写了一个简单的代码来打开一个读取数据帧的csv文件。该代码能够打印数据帧。为了使这段代码更具交互性,我集成了一个功能,以便在sys.argv[1]不为true时它会引发错误。不幸的是,我无法正确地集成“引发异常部分”,在苦苦挣扎之后,我正在寻找解决方案。下面给出了代码(尽管我已经用本机代码做了很多尝试,但这里我只粘贴我为实现目标所做的最后一次更改(即,如果sys.argv[1]不正确,则引发异常):谢谢 class My_csv_class(object): def __init__

我写了一个简单的代码来打开一个读取数据帧的csv文件。该代码能够打印数据帧。为了使这段代码更具交互性,我集成了一个功能,以便在sys.argv[1]不为true时它会引发错误。不幸的是,我无法正确地集成“引发异常部分”,在苦苦挣扎之后,我正在寻找解决方案。下面给出了代码(尽管我已经用本机代码做了很多尝试,但这里我只粘贴我为实现目标所做的最后一次更改(即,如果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()

\uuuu init\uuuu
方法中引发异常。您可以在实例创建周围放置
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()
但是,在此类代码之外处理命令行问题更为常见。在没有命令行的情况下保持代码的可重用性,并将所有“脚本任务”放在
\uuuu main\uu
保护代码中:

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
,如果未给出该选项,解析器将自动引发错误。

您的建议对我的代码非常有用,但我的Qsn.没有得到回答,但运行该选项后,我发现它更有用。非常感谢。没问题!我发现
argparse
处理了大部分问题我的命令行参数需要解析。我以前从未考虑过这一点,但我真的很感激你关于代码可重用性的想法。通过你的评论,我获得并学到了一个非常重要的概念。非常感谢。