相关疑难解决方法(0)

是否有一种简单,优雅的方式来定义单身人士?

似乎有很多方法可以在Python中定义单例.Stack Overflow是否有共识?

python singleton design-patterns

427
推荐指数
13
解决办法
27万
查看次数

为什么运行Flask开发服务器会自行运行两次?

我正在使用Flask开发网站,在开发过程中,我使用以下文件运行烧瓶:

#!/usr/bin/env python
from datetime import datetime
from app import app
import config

if __name__ == '__main__':
    print '################### Restarting @', datetime.utcnow(), '###################'
    app.run(port=4004, debug=config.DEBUG, host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)

当我启动服务器时,或者由于文件已更新而自动重启时,它始终显示两次打印行:

################### Restarting @ 2014-08-26 10:51:49.167062 ###################
################### Restarting @ 2014-08-26 10:51:49.607096 ###################
Run Code Online (Sandbox Code Playgroud)

虽然这不是一个真正的问题(其余部分按预期工作),但我只是想知道它为什么会这样?有任何想法吗?

python flask

81
推荐指数
4
解决办法
2万
查看次数

如何防止模块导入两次?

在编写python模块时,有没有办法防止它被客户端代码导入两次?就像c/c ++头文件一样:

#ifndef XXX
#define XXX
...
#endif
Run Code Online (Sandbox Code Playgroud)

非常感谢!

python import module

29
推荐指数
3
解决办法
2万
查看次数

在__init__.py和同一目录中导入模块时,python 2.7和3.3+之间的区别

最近我遇到了一个问题,即我在flask-security中使用信号在python 3.3中表现不如预期.在查看flask-security的源代码时,我注意到我从flask-security包中的模块导入的信号也被导入了__init__.py.通过从包的顶层导入信号,我能够解决我的问题(因为在初始化包时导入信号).

如果我运行以下代码:

from flask.ext.security import user_registered
from flask.ext.security.signals import user_registered as user_reg_sig
user_registered==user_reg_sig
Run Code Online (Sandbox Code Playgroud)

我将进入Truepython 2.7,我将获得Falsepython 3.3+.

python 3.3+有什么不同导致导入行为的这种差异?

编辑: 我仍然由Python 2.7 VS 3.3+的问题难住了,但已成功地缩小了,当问题发生__init__.pyflask.ext被称为并使用ExtensionImporter类从exthook.py进口瓶的安全性.

在python 3.4下运行以下命令会在True直接导入flask-security时返回,避免使用扩展钩子:

from flask_security.signals import user_registered as user_reg_sig
from flask_security import user_registered
user_registered==user_reg_sig
Run Code Online (Sandbox Code Playgroud)

这里有关于flask.ext.security和flask_security示例的信号的repr():

from flask_security.signals import user_registered as user_reg_sig
from flask_security import user_registered

repr(user_registered)
>>> "<blinker.base.NamedSignal object at 0x7fb38e258400; 'user-registered'>"

repr(user_reg_sig)
>>> "<blinker.base.NamedSignal object at 0x7fb38e258400; 'user-registered'>" …
Run Code Online (Sandbox Code Playgroud)

python python-import flask python-3.x flask-security

8
推荐指数
1
解决办法
492
查看次数

isinstance在AppEngine中不适用于Decimal

我有一个decimal.Decimal来自SQLAlchemy查询的实例.因为我需要序列化对象,所以我创建了一个JSON序列化程序来处理Decimal:

import decimal
class AlchemyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, decimal.Decimal):
            return str(obj)
        return json.JSONEncoder.default(self, obj)
Run Code Online (Sandbox Code Playgroud)

不幸的是,即使在上面的方法中使用pdb,isinstance(obj, decimal.Decimal)也不会True为实例返回a default:

obj.__class__ # => <class 'decimal.Decimal'>
blah = decimal.Decimal()
blah.__class__ # => <class 'decimal.Decimal'>
isinstance(obj, decimal.Decimal) # => False
isinstance(blah, decimal.Decimal) # => True
isinstance(obj, obj.__class__) # => True
Run Code Online (Sandbox Code Playgroud)

我确实检查了两个实例引用的模块是否是同一个模块:

import inspect
inspect.getfile(obj.__class__) # => '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/decimal.pyc'
inspect.getfile(blah.__class__) # => '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/decimal.pyc'
Run Code Online (Sandbox Code Playgroud)

我真的很想知道为什么这不起作用!

编辑

事实证明,只有在AppEngine dev_appserver.py环境下运行时才会出现问题.一个简单的:

isinstance(db.session.execute('SELECT amount FROM model LIMIT 1').fetchone()[0], decimal.Decimal)
Run Code Online (Sandbox Code Playgroud)

False …

python google-app-engine sqlalchemy decimal

5
推荐指数
1
解决办法
1496
查看次数