请考虑以下代码:
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()
该代码仅在第二个文件不是第一个文件时打开第二个文件。
第一个文件的名称由open_file()中的fname1
表示。如果第二个文件的名称(在这种情况下为b_name
)与第一个文件的名称匹配,则会提示用户输入新名称。
我为None
参数提供了fname1
的默认参数,因为该函数有时仅用于打开一个文件而不用于将其与另一个文件进行比较。但是,我似乎无法覆盖默认参数。
a_name
中get_2cubes
的{{1}}条件无法识别if fname1:
的第7行open_file
变量,因此我可以两次打开同一个文件。我该如何纠正这个?
答案 0 :(得分:4)
我认为您需要使用raw_input
。否则,输入的文本将被视为变量名称,因此将等于None
。 (除非您使用的是Python 3)