返回函数时,我收到TypeError:invalid file

时间:2018-04-17 12:23:49

标签: python class tkinter return

我试图在另一个类中使用变量。我这样做是通过返回一个函数然后在另一个类中访问它。

我的程序正在尝试使用python tkinter在gui中显示csv文件。

但我得到的只是:

  

TypeError:文件无效:<<函数NewSession.returnCsvFileDir at   0x0363E228>>

     

文件“\ cur-fsm \ 2011 $ \ userdata \ 11azama \ COMPUTER SCIENCE   PROJECT \ Project(NEW VERSIONS)(1)\ NEW PROJECT V7 \ MainApplication.py“,   第188行,在showCSV中打开(testCSV,newline =“”)作为文件:   TypeError:无效文件:<<函数NewSession.returnCsvFileDir at   0x0363E228>>

这是我的一些代码:

从第一堂课开始:

def returnCsvFileDir(self, master, csvFileDir):
    NewSession.csvFile = print(csvFileDir)
    return NewSession.csvFile

来自其他班级:

def showCSV(self,master,NewSession):
    testCSV = (NewSession.returnCsvFileDir)
    print(testCSV)
    with open(testCSV, newline = "") as file:
       reader = csv.reader(file)
       r = 0
       for col in reader:
          c = 0
          for row in col:
             label = Label(root, width = 10, height = 2, \
                                   text = row, relief = RIDGE)
             label.grid(row = r, column = c)
             c += 1
          r += 1

2 个答案:

答案 0 :(得分:0)

部分问题是NewSession.csvFile = print(csvFileDir)将NewSession.csvFile分配给print(csvFile)的返回值,即None。您没有为NewSession.csvfile分配函数。

要修复,您可以考虑使用

NewSession.csvFile = print

此外,您正在调用print(testcsv) m,这将无效,因为testcsv未返回值。您可能希望使用参数调用 testcsv。

在更高级别,看起来您正在尝试使用闭包和部分求值函数来获取csvFileDir参数并将其传递给函数调用。虽然你可以做到这一点,(我还没有在python中做到这一点,所以我不知道细节),我建议找一种更简单的方法来将文件名作为字符串传递不用担心传递函数。

答案 1 :(得分:0)

问题从这两行开始:

testCSV = (NewSession.returnCsvFileDir)
...
with open(testCSV, newline = "") as file:

首先,您要将testCSV设置为函数,而不是函数的结果。其次,您将此函数传递给open,但open需要一个文件路径。

我的猜测是你打算调用 NewSession.returnCsvFileDir,所以第一步就是这样做,并将结果分配给testCSV

testCSV = NewSession.returnCsvFileDir(...)

然而,这个函数有两个参数,但我不知道这些参数应该是什么,所以你必须弄明白。

这引出了第二个问题,即NewSession.returnCsvFileDir(...)返回None,即使用适当的参数调用也是如此。那是因为这两行:

NewSession.csvFile = print(csvFileDir)
return NewSession.csvFile

这会将NewSession.csvFile设置为print的结果,print会返回None

我不知道解决方案是什么,因为似乎该函数应该返回文件的路径,但它给出的只是一个目录和一个名为{{ 1}}。我不知道它应该如何使用这两个来计算文件的路径。