- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在我的 Django 应用程序中收到此错误,但是,它每天只发生一次或更少,而且事实证明它极难调试。
Environment:
Request Method: POST
Django Version: 1.3.1
Python Version: 2.6.6
Installed Applications:
['django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'fimedlabs',
'data',
'djcelery']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'fimedlabs.auth.userMiddleWare')
Traceback:
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
178. response = middleware_method(request, response)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/middleware.py" in process_response
36. request.session.save()
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/backends/db.py" in save
57. session_data = self.encode(self._get_session(no_load=must_create)),
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/backends/base.py" in encode
93. pickled = pickle.dumps(session_dict, pickle.HIGHEST_PROTOCOL)
Exception Type: PicklingError at /
Exception Value: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
我试过这个问题的答案:
How to tell for which object attribute pickle fails?
通过将 self 添加到实际错误中以查看是否会打印 Django 错误中的任何内容而无济于事。
我在哪里可以打印出导致此错误出现问题的对象,以便它出现在 Django 错误页面中?
谢谢!~马特
编辑:我存储在缓存中的唯一对象是一个带有代码的用户对象:
class user(object):
username = str()
userid = uuid.UUID(int=0)
client = models.Client()
clientid = uuid.UUID(int=0)
clientname = ''
data = models.User()
accesslevel = models.AccessLevel()
active = False
client_active = False
isFimed = False
isFimedAdmin = False
isClientAdmin = False
isFimedManager = False
mysettingsform = None
viewingas = False
menu = []
_exists = False
_authenticated = False
def __str__(self):
return str(self.__dict__.copy())
def __getstate__(self):
return self.__dict__.copy()
def __setstate__(self, dict):
self.__dict__ = dict
def __init__(self, username=None):
if username:
self.initialize(username)
def initialize(self, username):
self.username = username
model = models.User.objects.filter(username=username).all()
if len(model) == 1:
model = model[0]
self.data = model
self._exists = True
self.userid = self.data.id
self.active = self.data.active
self.isFimed = self.data.isFimed()
self.isFimedAdmin = self.data.isFimedAdmin()
self.isClientAdmin = self.data.isClientAdmin()
self.isFimedManager = self.data.isFimedManager()
self.mysettingsform = UserFormSelf(initial={"id":model.id, "username":model.username, "name":model.name, "email":model.email, "phone":model.phone})
self.accesslevel = models.AccessLevel.objects.filter(id=self.data.accesslevel_id)[:1][0].level
cli = self.data.client
self.client = cli
self.clientid = cli.id
self.clientname = cli.name
if cli.active:
self.client_active = True
model.lastlogin = datetime.datetime.now()
model.save()
self.menu = getMenu(self.data)
else:
self._exists = False
def authenticate(self, password):
self._authenticated = False
if (self.active == False or self.client_active == False):
return False
if self._exists:
import hashlib
hash = hashlib.md5('%s%s' % (str(password), self.data.pwsalt)).hexdigest()
if hash == self.data.pwhash:
self._authenticated = True
return True
return False
def updateUser(self):
self.initialize(models.User.objects.filter(id=self.userid).get().username)
def mkContext(self):
c = Context()
c['menu'] = self.menu
c['user'] = self
c['language'] = language
c['colors'] = colors
c["isFimed"] = self.isFimed
c["isFimedAdmin"] = self.isFimedAdmin
c["isClientAdmin"] = self.isClientAdmin
c["isFimedManager"] = self.isFimedManager
c["mysettingsform"] = self.mysettingsform
return c
编辑:Werkzeug 之后的 WSGI 文件:
import django.core.handlers.wsgi
djangoapplication = django.core.handlers.wsgi.WSGIHandler()
def application(environ, start_response):
if 'SCRIPT_NAME' in environ:
del environ['SCRIPT_NAME']
return djangoapplication(environ, start_response)
# The following lines enable the werkzeug debugger
import django.views.debug
def null_technical_500_response(request, exc_type, exc_value, tb):
raise exc_type, exc_value, tb
django.views.debug.technical_500_response = null_technical_500_response
from werkzeug.debug import DebuggedApplication
application = DebuggedApplication(application, evalex=True)
最佳答案
在我的例子中(与 Django 无关)当 lambda 作为目标函数传递时,此异常由 multiprocessing.Pool.map
抛出。创建一个命名函数并通过 initargs
参数(而不是通过闭包)传递所需的上下文数据结构解决了这个问题。
总而言之,触发异常的坏用例是:
import multiprocessing as mp
context = some_object
pool = mp.Pool()
worker_func = lambda x: work(x, context)
results = pool.map(worker_func, data_list)
关于python - 无法 pickle <type 'function' > : attribute lookup __builtin__. 函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10898268/
我有以下代码片段和输出 带有元类: def some(*args): return type(args) __metaclass__ = some class Foo: a = 'khk
为什么第一条语句返回NameError,而max可用 >>> __builtin__ Traceback (most recent call last): File "", line 1, in
考虑: Python 2.7.3 (default, Aug 2 2012, 16:55:39) [GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2 T
我在我的 arch linux box 上安装了 rdiff-backup 只是以属性错误结束: AttributeError: 'module' object has no attribute 'r
我正在尝试在 python3.6 中加载(复制的)pickle 对象,但这样做时出现 __builtin__\r 的导入错误。 with open('FilePath/FileName.pkl', "
我正在使用如下比较: if type( self.__dict__[ key ] ) is str \ or type( self.__dict__[ key ] ) is set \
我正在尝试了解 __builtin__ 在 Python 中的工作原理。我的代码如下: import __builtin__ class MyList(list): pass __builti
出于超出此问题范围的原因,我正在构建一个序列化机制。我遇到了 None 对象的问题,我认为我需要特殊情况。谁能解释为什么 NoneType 与其他内置类型的处理方式不同?还是我遗漏了什么? >>> i
在我看到的一些 python 代码示例中,from __builtin__ import True。 True 已经内置了,所以我想知道为什么要导入它? 最佳答案 没有充分的理由,除非模块出于某种原因
如果我有一个模块 Test 并且我需要列出其中的所有函数,我会这样做: import Test dir(Test) 除非我导入模块,否则我将无法使用其中定义的函数。 但是__builtin__模块中的
我今天正在编码并注意到一些东西。如果我打开一个新的解释器 session (IDLE)并检查 dir 函数定义的内容,我会得到: $ python >>> dir() ['__builtins__',
我在“cythonizing”一个用 python 编写的项目时遇到问题。 1. 实例化一个 python 类(在文件 myclass.py 中声明),然后在文件 main.py 中使用 setatt
当我调用 execfile 而不传递全局变量或局部变量参数时,它会在当前命名空间中创建对象,但如果我调用 execfile 并为全局变量(和/或局部变量)指定字典,它会在 __builtin__ 命名
我偶然发现了这条 python : __builtin__.__dict__['N_'] = lambda x: x class X: doc = N_('some doc for class
我很好奇 __builtin__ 模块以及它是如何使用的,但是我在 Python3 中找不到它!为什么要搬家? Python 2.7 >>> import __builtin__ >>> Python
print.__doc__ 输出: SyntaxError: invalid syntax 在哪里 >>> getattr(__builtin__,"print").__doc__ 输出: print
在 Python 中,有一个 dir()和 __builtin__ 内置对象列表。 >>> dir(__builtins__) ['ArithmeticError', 'AssertionError'
我在我的 Django 应用程序中收到此错误,但是,它每天只发生一次或更少,而且事实证明它极难调试。 Environment: Request Method: POST Django Version:
我在 spacemacs 中启用了 python 层,当使用跳转到定义时,出现“无法打开 __builtin__ 模块”错误。我在 pycharm 中使用了相同的 vim 样式命令“gd”,没有遇到任
Sentry :8.4.0 sentry-youtrack 插件:0.3.1 youtrack-6.5.17105 python-memcached:1.53 我正在尝试集成youtrack进入sen
我是一名优秀的程序员,十分优秀!