如何处理 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
,如果没有给出选项,解析器会自动抛出一个错误。
我已经写下了一个简单的代码来打开一个读取数据框的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
,如果没有给出选项,解析器会自动抛出一个错误。