Python 命令行参数 Try/Except
Python Command Line Arguments Try/Except
我想创建一个接受两个命令行参数的程序。第一个是要打开进行解析的文件的名称,第二个是标志 -s。如果用户提供了错误数量的参数或者另一个参数不是 -s 那么它将打印消息 "Usage: [-s] file_name" 并使用 exit 终止程序。
接下来,我希望我的程序尝试打开文件进行读取。程序应该打开文件读取每一行和 return 每个浮点数、整数和其他非整数或浮点数的字符串的计数。但是,如果打开文件失败,它应该引发异常并打印 "Unable to open [filename]" 并使用 exit 退出。
我一直在 Internet 上查找很多关于 Python 中的命令行的资料,但最后我更加困惑了。因此,到目前为止,这是我在研究方面的尝试。
from optparse import OptionParser
def command_line():
parser = OptionParser()
parser.add_option("--file", "-s")
options, args = parser.parse_args()
if options.a and obtions.b:
parser.error("Usage: [-s] file_name")
exit
def read_file():
#Try:
#Open input file
#Except:
#print "Unable to open [filename]"
#Exit
from optparse import OptionParser
import sys,os
def command_line():
parser = OptionParser("%prog [-s] file_name")
parser.add_option("-s",dest="filename",
metavar="file_name",help="my help message")
options, args = parser.parse_args()
if not options.filename:
parser.print_help()
sys.exit()
return options.filename
def read_file(fn):
if os.path.isfile(fn):
typecount = {}
with open(fn) as f:
for line in f:
for i in line.split()
try:
t = type(eval(i))
except NameError:
t = type(i)
if t in typecount:
typecount[t] += 1
else:
typecount[t] = 1
else:
print( "Unable to open {}".format(fn))
sys.exit()
print(typecount)
read_file(command_line())
所以一步一步来:
- options.a 未定义,除非您定义选项
--a
或(最好)设置 dest="a"
.
- 使用内置的
parser.print_help()
比自己制作更好,然后您可以免费获得 -h
/--help
。
- 您从未调用过您的函数
command_line
,因此不会出现任何错误,因为语法是正确的。我将命令行设置为仅将文件名作为 return 值传递,但是当您有更多 options/arguments. 时,有更好的方法可以做到这一点
当谈到 read_file
时,我建议使用 os.path.isfile
而不是对文件使用 try-except,它将检查文件是否存在。但是,这不会检查文件是否具有正确的格式。
然后我们创建一个类型字典,然后遍历所有行并评估由白色分隔的对象space(space,newline,tab)。如果您的值由例如分隔。一个逗号,你需要使用line.split(',')
。
如果您想稍后在脚本中使用计数,您可能需要 return typecount
而不是打印它。
我想创建一个接受两个命令行参数的程序。第一个是要打开进行解析的文件的名称,第二个是标志 -s。如果用户提供了错误数量的参数或者另一个参数不是 -s 那么它将打印消息 "Usage: [-s] file_name" 并使用 exit 终止程序。
接下来,我希望我的程序尝试打开文件进行读取。程序应该打开文件读取每一行和 return 每个浮点数、整数和其他非整数或浮点数的字符串的计数。但是,如果打开文件失败,它应该引发异常并打印 "Unable to open [filename]" 并使用 exit 退出。
我一直在 Internet 上查找很多关于 Python 中的命令行的资料,但最后我更加困惑了。因此,到目前为止,这是我在研究方面的尝试。
from optparse import OptionParser
def command_line():
parser = OptionParser()
parser.add_option("--file", "-s")
options, args = parser.parse_args()
if options.a and obtions.b:
parser.error("Usage: [-s] file_name")
exit
def read_file():
#Try:
#Open input file
#Except:
#print "Unable to open [filename]"
#Exit
from optparse import OptionParser
import sys,os
def command_line():
parser = OptionParser("%prog [-s] file_name")
parser.add_option("-s",dest="filename",
metavar="file_name",help="my help message")
options, args = parser.parse_args()
if not options.filename:
parser.print_help()
sys.exit()
return options.filename
def read_file(fn):
if os.path.isfile(fn):
typecount = {}
with open(fn) as f:
for line in f:
for i in line.split()
try:
t = type(eval(i))
except NameError:
t = type(i)
if t in typecount:
typecount[t] += 1
else:
typecount[t] = 1
else:
print( "Unable to open {}".format(fn))
sys.exit()
print(typecount)
read_file(command_line())
所以一步一步来:
- options.a 未定义,除非您定义选项
--a
或(最好)设置dest="a"
. - 使用内置的
parser.print_help()
比自己制作更好,然后您可以免费获得-h
/--help
。 - 您从未调用过您的函数
command_line
,因此不会出现任何错误,因为语法是正确的。我将命令行设置为仅将文件名作为 return 值传递,但是当您有更多 options/arguments. 时,有更好的方法可以做到这一点
当谈到 read_file
时,我建议使用 os.path.isfile
而不是对文件使用 try-except,它将检查文件是否存在。但是,这不会检查文件是否具有正确的格式。
然后我们创建一个类型字典,然后遍历所有行并评估由白色分隔的对象space(space,newline,tab)。如果您的值由例如分隔。一个逗号,你需要使用line.split(',')
。
如果您想稍后在脚本中使用计数,您可能需要 return typecount
而不是打印它。