【问题标题】:how to fix 'TypeError: 'module' object is not callable' in flask?如何修复烧瓶中的'TypeError:'module'对象不可调用'?
【发布时间】:2019-10-15 17:01:00
【问题描述】:

我想使用 Python 创建一个 Web 服务。 服务内容如下。

  1. 接收来自用户的音乐文件
  2. 分析收到的文件并创建一个新的音乐文件。 (已经使用python库完成了函数实现。)
  3. 将新创建的音乐文件输出给用户。

主要目标是分析音乐文件并创建一个新的,为此目的输入和输出音乐文件是次要功能。所以我对创建 Web 服务一无所知,需要帮助来实现此功能。我上网并在一定程度上实现了它,但是我得到了一个我不知道为什么的错误。

我上传了app.py__init__.py 的代码。我还上传了目录的结构。看起来需要修复一些东西才能使用控制器内部的功能。我已经在互联网和 YouTube 上搜索了十二个多小时,但我真的不知道。我在控制器目录中创建了一个名为NoteConvertorMarcovMatrix 的类。

它会一直运行,直到我转到 http://127.0.0.1:5000/ 并收到一个文件。然后我收到以下错误:

File "C:\Users\K\git\flask\gp\app.py", line 24, in wav_transform

sr, data = scipy.io.wavfile('static/file1.wav')

TypeError: 'module' object is not callable

-gp
|----controller
|        MarcovMatrix.py
|        MatrixBuilder.py
|        NoteConvertor.py
|----static
|        style.css
|----templates
|        index.html
|        upload.html
|        wavplay.html
|----__init__.py
|----app.py

app.py

import flask
from flask import Flask, request, render_template
from werkzeug.utils import secure_filename
import scipy
import numpy as np
from scipy import misc
import pysynth as ps      
from scipy.io import wavfile  

app = Flask(__name__)


@app.route('/')
@app.route("/upload")
def index():
    return render_template('index.html')

@app.route('/uploader', methods=['GET', 'POST'])
def wav_transform():
    if request.method == 'POST':
        f = request.files['file']
        f.save(f'static/file1.wav')
        sr, data = scipy.io.wavfile('static/file1.wav')

        empty_notes = controller.NoteConvertor(data)
        notes = empty_notes.convertor()
        song = sum(notes, [])

        matrix = controller.MarcovMatrix(song)
        start_note = ['e4', 4]

        random_song = []
        for i in range(0, 100):
                start_note = matrix.next_note(start_note)
                random_song.append(start_note)

        ps.make_wav(random_song, fn='static/random.wav')

        return render_template('wavplay.html')


if __name__ == '__main__':
    app.run(debug = True)


__init__.py
from gp.controller import MarcovMatrix
from gp.controller import MatrixBuilder
from gp.controller import NoteConvertor

我想告诉你如何在烧瓶中使用python编写的函数(在控制器内部)。

如果您想知道如何做我想做的事,我将不胜感激。请理解这个问题,因为学习网络基础知识不是我的主要目标。

【问题讨论】:

  • 请同时在 app.py 中显示imports
  • 我选择了。很高兴再次见到你。
  • OP 犯了两个非常基本的 Python 错误,许多其他问题都很好地涵盖了这些错误。

标签: python-3.x flask wsgi


【解决方案1】:

这是一个导入问题。您可以选择任一

import scipy
...
sr, data = scipy.io.wavfile('static/file1.wav')

from scipy.io import wavfile
...
sr, data = wavfile('static/file1.wav')

【讨论】:

  • 哦,我解决了这个问题。这是一个小错误。非常感谢。但是出现了一个新问题,出现以下错误:'NameError: name 'controller' is not defined' 这是我真的很难的地方。如何使用我在控制器中创建的 python 类?
  • 您在gp/controller 中有__init__.py 吗?
  • 不...我也应该在 gp/controller 中创建 init.py 吗?如果有,应该写什么?上面代码中的 gp 中的 init.py 是否单独工作?
  • Python 查找是否存在__init__.py(可以为空)以确定目录是否对应于模块。见docs.python.org/3/tutorial/modules.html
  • NameEroor 问题已解决。非常感谢您对我的问题的持续关注。但是,这次我收到了这个错误:AttributeError:模块'controller'没有属性'NoteConvertor'。为什么我会收到此错误?我当然在 gp/controller 中写了 NoteConvertor.py..
猜你喜欢
  • 2014-07-28
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多