【问题标题】:Calling a function in other module调用其他模块中的函数
【发布时间】:2018-06-04 07:17:12
【问题描述】:

我想在另一个模块中调用一个函数,但我总是得到相同的错误语句“模块'mat_import'没有属性'matread'”。

从 GUI 获取“文件名”和“button_pressed”值后,我想在 mat_import 中调用 matread。结果应该是我在 main.py 中可以访问 filename1 和 button_pressed。

ma​​in.py:

编辑:要获取“filename1”和“button_pressed”,调用 GUI.py 中的函数 gui。这有效并将文件名返回给 main.py。之后我想在 mat_import 中调用 matread。函数 matread 应该从 main.py 获取文件名并读取文件。输出是两个变量“信号”和“信号数据”。

import mat_import as mi
import GUI

filename1, button_pressed = GUI.gui()

if (button_pressed ==1):
    signals, signaldata = mi.matread

ma​​t_import.py:

import h5py
import numpy as np
import csv
import os
import main

filename1 = ""
global matread

def matread():
    #get signals and signaldata
    return signals, signaldata

【问题讨论】:

  • 你没有打电话给matread,你试过mi.matread()
  • 是的,但出现同样的错误。
  • matread 是全局定义的吗?如果它是在另一个函数中定义的,从缩进来看,那么它可能不在 mat_import 模块的全局命名空间中。更多信息:stackoverflow.com/questions/8457669/…
  • @Jonas 我看不出这个链接的代码有什么问题。我应该如何定义 matread?
  • @Rainer 在下面看到我的回答。

标签: python python-3.x tkinter


【解决方案1】:

正如我在评论中提到的,从您对问题的描述和问题的缩进中,我最好的猜测是 matread() 是在 mat_import.py 文件的另一个函数中定义的。为了使 matread 可从 main.py 调用,您需要 1. 将其定义为全局并 2. 执行定义它的函数。或者,您可以在任何其他函数之外定义 matread(),就像我对 matread2 所做的那样以下。您可以在此处阅读有关变量范围的更多信息:https://matthew-brett.github.io/teaching/global_scope.html

mat_import.py:

def matread2():
        return "b"

def outer_func():
        global matread
        def matread(): return "a"

main.py:

import mat_import as mi

try:
        mi.matread()
except AttributeError as e:
        print(e)
mi.outer_func()
print mi.matread()

print mi.matread2()

【讨论】:

  • 现在我有错误“模块'mat_import'没有属性'outer_func'”
  • 你能发布你的整个 mat_import 文件吗? @Rainer
  • @Rainer 这只是一个示例,实际上并不是您的代码将如何工作
  • 好吧,我发布的代码是独立运行的,正如使用不同文件名所描述的那样。如果您有其他代码,则必须正确集成我的代码。另外outer_func是一个占位符,我不知道你的代码中调用了什么外部函数。
  • @Jonas 很抱歉,我不能发布整个 mat_import 文件,因为我工作的公司不允许我这样做。
猜你喜欢
  • 2023-03-15
  • 2013-10-10
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多