我想在gae中为我的路由器模块创建一个docstring。我也知道它必须是模块中的第一件事(在文件编码类型之后)。
问题是,如果你单独运行这个模块,你只会得到一个导入错误(No module named webapp2
)。我想要的是打印文档字符串时运行的文件,但这个导入错误只是不让我。有什么办法可以做到吗?
我试着:
if __name__ == "__main__":
print help(self)
和其他组合,但都没有成功。
[编辑]无具体代码。可以是appengine的例子:
# coding: utf-8
""" docstring """
import webapp2
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, webapp World!')
app = webapp2.WSGIApplication([('/', MainPage)],
debug=True)
当您将其作为独立运行时,ImportError
会发生,因为它不包含作为应用程序运行时包含的任何'魔法'。例如,如果您查看dev_appserver.py
(只是用于运行开发服务器的基本功能),您将看到这个函数:
def fix_sys_path(extra_extra_paths=()):
"""Fix the sys.path to include our extra paths."""
extra_paths = EXTRA_PATHS[:]
extra_paths.extend(extra_extra_paths)
sys.path = extra_paths + sys.path
在这里你可以看到sys.path
正在被修改,以包括一些"额外的"路径,如果我们看看其中一个,你会看到webapp2
(以及SDK中提供的其他库):
EXTRA_PATHS = [
# ...other similar setups...
os.path.join(DIR_PATH, 'lib', 'webapp2'),
# ...other similar setups...
]
您可以看到GAE正在幕后执行一些额外的步骤,以便您可以毫无问题地使用import webapp2
。因此,当你尝试自己运行它时,你会得到这个错误,因为你的系统只是检查webapp2
的标准路径(你可能没有安装)。
这并没有真正回答你的问题:)至于这一点,我相信肯定有更优雅/适当的方法来处理这个问题,但是你可以尝试的一件事是在try/except
块和ImportError
上包装你的导入,检查你是否直接运行模块。如果是,调用模块docstring并退出。注意,这只是一个示例—如果您要实际使用它,您将希望使其更精细:
"""Module information."""
import sys
try:
import webapp2
except ImportError:
if __name__ == '__main__':
print __doc__
else:
print 'Webapp2 not found'
sys.exit(1)
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, webapp World!')
app = webapp2.WSGIApplication([('/', MainPage)],
debug=True)
如果直接运行,将打印Module information