【问题标题】:Requiring modules in python在 python 中需要模块
【发布时间】:2014-06-12 15:58:47
【问题描述】:

我确信这是一个非常简单的问题,但我似乎无法弄清楚。我正在进入 python 并使用基本的“hello world”路由器作为示例。我想导出大部分代码以将应用程序扩展为多个文件。当所有代码都在一个文件中时,它可以正常工作,但是当它被移动到两个单独的文件中时,它就会爆炸。非常感谢任何帮助。

第一个文件

import re # first file
from Primer.Core.router import Router // second file, excluded when all code is in 1 file

# second file code here when combined

def application(environ, start_response):
    router = Router(environ, start_response)
    return router.run()

第二个文件

from cgi import escape


class Router:

def __init__(self, environ, start_response):
    self.environ = environ
    self.start_response = start_response

def run(self):
    path = self.environ.get('PATH_INFO', '').lstrip('/')
    if (path == 'hello')
        return 'hello'
    else
        return 'other'

【问题讨论】:

  • 你能解释一下你说你的代码“炸弹”是什么意思吗?会发生什么?
  • 是的,对不起。我在网络浏览器中运行代码(通过 apache),它返回 500 错误。
  • 您是否阅读了 Apache 日志以了解发生了什么?
  • 你能检查错误日志吗?请参阅this 了解更多信息。
  • 原来问题是我的 Apache 配置中没有设置 WSGIPythonPath。我还在习惯这一切。感谢大家的帮助!

标签: python


【解决方案1】:

目前,我看到代码中有几个错误:

  1. 导入将失败,因为在其后写入了非 Python 注释 (//)。您应该改用#
  2. 您应该检查您的文件结构是否正确:

    ├── Primer │   ├── Core │   │   ├── __init__.py │   │   └── router.py │   ├── __init__.py └── index.py

  3. Router 类中的 ifelse 都缺少冒号:

    def run(self): path = self.environ.get('PATH_INFO', '').lstrip('/') if (path == 'hello'): return 'hello' else: return 'other' 此外,Router 类中方法的缩进在您的示例中未正确设置,但我想在您的文件中可以...

我会先检查错误不是由于那个原因造成的。

【讨论】:

  • 抱歉粘贴的粗鲁, // 注释不在我的实际代码中(它仅用于这篇文章)。我已经仔细检查了冒号,这不是问题。
  • 你有index.py文件和Primer文件夹在同一级吗?您确定导入错误来自 index.py 文件,而不是来自另一个子文件夹中的任何其他文件(可能无法找到 router.py 文件)?使用我之前所说的结构,它不会对我产生任何错误,但我当然只有你发布的代码。也许如果您提供更多代码或详细信息,我们可以复制您的问题...
【解决方案2】:

如果两个文件在同一个目录下,你应该去掉import的前缀。

from router import Router

另外,您需要在包含将要导入的文件的目录中创建一个空文件__init__.py

【讨论】:

  • 它们不在同一个文件夹中,所有目录下都有一个init python文件,直到router.py文件。
猜你喜欢
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
相关资源
最近更新 更多