这更像是编码风格的问题,但我有一个处理特定文件(或文件集)的脚本。允许用户将这些文件作为命令行参数提供是很好的。当然,用户可能忘记提供这些或文件名无效,所以我必须在这里介绍一下try / except。
问题是,有人可能希望将来导入我的模块。但是,我不知道程序可能需要的命令行参数。此外,如果我的模块访问命令行参数时抛出错误,似乎导入我的模块的脚本会更好地处理它。但是,如果抛出错误,我的脚本仍然需要能够独立应对。
是否有解决此问题的智能方法,或者只是放弃命令行参数的最佳解决方案?
答案 0 :(得分:4)
通常的程序:
import sys
def main(*files):
# your program's logic goes here
if __name__ == "__main__": #i.e. run directly
try:
main(*sys.argv[1:])
except IOError:
handle_error()
如果导入,__name__
将是!= "__main__"
,因此实际上没有任何内容发生,导入者可以调用main(file1, file2)
。但如果这个脚本是主脚本(即未导入),它只会在main
中执行它现在所做的工作。
答案 1 :(得分:2)
检查您的文件是否正在运行或是否已导入:
def myFunction(file):
#do stuff to file
if __name__ == '__main__':
#I have not been imported!
try:
file = sys.argv[1]
except:
print "Usage: myFile.py file"
sys.exit()
myFunction(file)