如何处理python中与sys.argv[]相关的错误?
我写了一个简单的代码来打开一个读取数据帧的csv文件。该代码能够打印数据帧。为了使这段代码更具交互性,我集成了一个功能,以便在sys.argv[1]不为true时它会引发错误。不幸的是,我无法正确地集成“引发异常部分”,在苦苦挣扎之后,我正在寻找解决方案。下面给出了代码(尽管我已经用本机代码做了很多尝试,但这里我只粘贴我为实现目标所做的最后一次更改(即,如果sys.argv[1]不正确,则引发异常):谢谢如何处理python中与sys.argv[]相关的错误?,python,argparse,Python,Argparse,我写了一个简单的代码来打开一个读取数据帧的csv文件。该代码能够打印数据帧。为了使这段代码更具交互性,我集成了一个功能,以便在sys.argv[1]不为true时它会引发错误。不幸的是,我无法正确地集成“引发异常部分”,在苦苦挣扎之后,我正在寻找解决方案。下面给出了代码(尽管我已经用本机代码做了很多尝试,但这里我只粘贴我为实现目标所做的最后一次更改(即,如果sys.argv[1]不正确,则引发异常):谢谢 class My_csv_class(object): def __init__
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
处理了大部分问题我的命令行参数需要解析。我以前从未考虑过这一点,但我真的很感激你关于代码可重用性的想法。通过你的评论,我获得并学到了一个非常重要的概念。非常感谢。