相关疑难解决方法(0)

什么可能导致python模块导入两次?

据我所知,python模块永远不会导入两次,即模块中的代码仅在第一次导入时执行.后续导入语句只是将模块添加到导入范围.

我有一个名为"TiledConvC3D.py"的模块,但似乎已多次导入.我使用pdb打印此模块代码顶部的堆栈.

这是从第一次执行模块开始的堆栈跟踪结束:

File "<anonymized>/python_modules/Theano/theano/gof/cmodule.py", line 328, in refresh
  key = cPickle.load(open(key_pkl, 'rb'))
File "<anonymized>/ops/TiledConvG3D.py", line 565, in <module>
  import TiledConvC3D
File "<anonymized>/ops/TiledConvC3D.py", line 18, in <module>
  pdb.traceback.print_stack()
Run Code Online (Sandbox Code Playgroud)

它继续执行几次.但是,第二次调用它的完整堆栈跟踪没有显示任何调用reload,因此不应发生这些执行:

File "sup_train_conj_grad.py", line 103, in <module>
  dataset = Config.get_dataset(dataset_node)
File "<anonymized>/Config.py", line 279, in get_dataset
  from datasets import NewWiskott
File "<anonymized>/datasets/NewWiskott.py", line 16, in <module>
  normalizer_train = video.ContrastNormalizer3D(sigma, global_per_frame = False, input_is_5d = True)
File "<anonymized>/util/video.py", line 204, in __init__
  self.f = theano.function([input],output)
File "<anonymized>/python_modules/Theano/theano/compile/function.py", line 105, in function …
Run Code Online (Sandbox Code Playgroud)

python import module

14
推荐指数
1
解决办法
6859
查看次数

Python decimal.Decimal id不一样

我在Python中使用JSON编码时出现问题,特别是使用decimal.Decimal值.我正在使用它为Google App Engine应用程序输出JSON.

为了绕过jsonPython中的默认模块的异常,告诉我它无法处理decimal.Decimal对象,我正在使用这个编码器子类:

class DecimalEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            return float(o)
        return super(DecimalEncoder, self).default(o)
Run Code Online (Sandbox Code Playgroud)

在其他应用程序上,这确实有效.在这种情况下,它没有.经过多次挫折后,我发现这给出了奇怪的结果:

print id(decimal.Decimal)
print id(type(o))
Run Code Online (Sandbox Code Playgroud)

人们会期望id是相同的,因为同一个类对象在内存中只驻留一次是有意义的.因为id的不同,isinstance()不起作用.

可能是十进制.Decimal已经导入其他地方,例如在App Engine和/或webapp2包中?

以下模块重现了我的系统上的错误(OSx 10.10,Python 2.7.6,GAE SDK 1.9.20).只需创建一个GAE应用程序并将其放在main.py中:

import webapp2, decimal, json, MySQLdb, sys

class DecimalEncoder(json.JSONEncoder):
    def default(self, o):
        print id(decimal.Decimal)
        print id(type(o))
        if isinstance(o, decimal.Decimal):
            return float(o)
        return super(DecimalEncoder, self).default(o)

class MainHandler(webapp2.RequestHandler):
    def get(self):
        db = MySQLdb.connect(unix_socket='/var/mysql/mysql.sock', host='localhost', user='root', db='ssss', charset='utf8')
        cursor = db.cursor(MySQLdb.cursors.DictCursor)
        cursor.execute("SELECT id, price FROM product WHERE id = 1") …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine json decimal

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

标签 统计

python ×2

decimal ×1

google-app-engine ×1

import ×1

json ×1

module ×1