我写了一个简单的代码来打开一个读取数据帧的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()
答案 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
,如果未给出选项,解析器将自动引发错误。