检查python中是否存在输入文件

时间:2014-03-15 17:26:34

标签: python

我正在编写一个正在读取已处理文件(file_name)的函数。在已处理的文件(open_file1)中,所有行都是元组。我的问题在于:为了使用该程序,我必须始终以命令输入作为输入文件名开始。如果用户输入TEAM IDENTIFIER即第三个elif语句而没有输入输入文件名,则程序崩溃。所以,我所做的是在第三个elif语句中,我用os语句检查了输入文件的存在。如果输入文件不存在,我写了一个else语句来请求另一个命令(即输入输入文件名并再次启动)。但是,出于某种原因,当我输入命令作为TEAM IDENTIFIER时,程序不会处理第三个elif语句的else语句。有什么建议?提前致谢。

 def main():
    command=input('Input cmd: ')
    while command.lower() !='quit':
        if command.lower()=='help':
            print("QUIT\n"\
                  "HELP\n"\
                  "INPUT filename\n"\
                  "TEAM identifier\n"\
                  "REPORT n HITS\n"\
                  "REPORT n BATTING\n"\
                  "REPORT n SLUGGING\n")
        elif command.startswith('INPUT') and len(command)>6:
            file_name=str(command[6:])
            open_file1=new_list(file_name)
            print(open_file1)

        elif command.startswith('TEAM') and len(command)>5:
            if os.path.isfile(open_file1):
                team_name=str(command[4:])
                for line in open_file1:
                    print(line[1])

            else:
                command=input('Input cmd: ')

        command=input('Input cmd: ')
main()

ERROR:

Traceback (most recent call last):
  File "C:\Users\Dasinator\Documents\Books IX\Python Examples\textbook examples\project 07\openfile.py", line 98, in <module>
    main()
  File "C:\Users\Dasinator\Documents\Books IX\Python Examples\textbook examples\project   07\openfile.py", line 81, in main
    if os.path.isfile(open_file1):
UnboundLocalError: local variable 'open_file1' referenced before assignment

1 个答案:

答案 0 :(得分:0)

问题在于您的行os.path.isfile(open_file1)isfile函数需要一个字符串,但是得到一个文件对象(如果存在open_file1),或者一个未引用的变量(如果open_file1不存在)。

我会用try-except块替换if-else语句:

elif command.startswith('TEAM') and len(command)>5:
            try:
                team_name=str(command[4:])
                for line in open_file1:
                    print(line[1])

            except UnboundLocalError:
                command=input('Input cmd: ')