代码之家  ›  专栏  ›  技术社区  ›  Adam Azam Year 12

返回函数时,我收到TypeError:无效文件

  •  1
  • Adam Azam Year 12  · 技术社区  · 7 年前

    我试图在一个类中使用另一个类中的变量。我是通过返回一个函数,然后在另一个类中访问它来实现的。

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

    但我得到的是:

    TypeError:无效文件:<<函数NewSession。returnCsvFileDir位于 0x0363E228>&燃气轮机;

    文件“\cur fsm\2011$\userdata\11azama\COMPUTER SCIENCE” PROJECT\PROJECT(新版本)(1)\NEW PROJECT V7\Main应用程序。py“, 第188行,在以open(testCSV,newline=)作为文件的showCSV中: TypeError:无效文件:<<函数NewSession。returnCsvFileDir位于 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 回复  |  直到 7 年前
        1
  •  0
  •   SteveM    7 年前

    部分问题在于新闻会话。csvFile=打印(csvFileDir)正在分配NewSession。csvFile到print(csvFile)的返回值,该值为None。您没有为NewSession分配函数。csvfile。

    要修复此问题,您可以考虑只使用

    NewSession.csvFile = print

    还有,你在打电话 print(testcsv) m这将不起作用,因为 testcsv 不返回值。你可能想 呼叫 带参数的testcsv。

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

        2
  •  0
  •   Bryan Oakley    7 年前

    问题从以下两行开始:

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

    首先,您正在设置 testCSV 函数,而不是 后果 函数的。第二,你通过了这个 作用 open 但是 打开 需要文件的路径。

    我猜你打算 呼叫 NewSession.returnCsvFileDir ,因此第一步是这样做,并将结果分配给 测试CSV :

    testCSV = NewSession.returnCsvFileDir(...)
    

    然而,该函数接受两个参数,但我不知道这些参数应该是什么,所以您必须弄清楚这一点。

    这就带来了第二个问题,那就是 NewSession.returnCsvFileDir(...) 退货 None ,即使使用适当的参数调用。这是因为这两条线:

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

    此设置 NewSession.csvFile 至的结果 print 打印 退货 没有一个

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