1

考虑以下代码:

import pickle

def open_file(fname, fname1 = None):
    # returns a new OPEN file
    if fname1:
        while fname == fname1:
            f_name = input("File already open, filename: ")
    f = None
    while not f:
        try:
            f = open(fname, "rb")
        except IOError:
            fname = input("File not found, filename: ")
    print(fname, "open")
    return f

def get_2cubes():
    a_name = input("\nWhat is the name of the first cube's file? ")
    a_file = open_file(a_name)
    #a_cube = pickle.load(a_file)
    a_file.close()

    b_name = input("\nWhat is the name of the second cube's file? ")
    b_file = open_file(b_name, a_name)
    #b_cube = pickle.load(b_file)
    b_file.close()
    #return a_cube, b_cube

get_2cubes()

该代码仅在不是第一个文件时才打开第二个文件。

第一个文件的名称由fname1open_file() 表示。如果第二个文件的名称(b_name在这种情况下)与第一个文件的名称匹配,则会提示用户输入新名称。

None我为参数提供了一个默认参数,fname1因为该函数有时仅用于打开一个文件,而不用于将其与另一个文件进行比较。但是,我似乎无法覆盖默认参数。

中的条件无法识别a_name第 7 行中的变量,因此我可以两次打开同一个文件。我将如何纠正这一点?get_2cubesif fname1:open_file

4

1 回答 1

4

我认为你需要使用raw_input. 否则输入的文本将被视为变量名,因此等于None. (除非您使用的是 Python 3)

于 2013-06-10T12:10:08.827 回答