我想在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)
答案 0 :(得分:1)
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
。