小编drd*_*rez的帖子

json.dump在看似有效的对象上抛出"TypeError:{...}不是JSON可序列化的"?

背景:我正在编写一个应该管理我的音乐文件的python程序.它抓取目录并将以JSON编码的文件及其元数据(通过mutagen)作为简单的"数据库"放入文件中.我有很好的目录搜索,但是当我尝试保存数据库或编码为JSON时,它会抛出"TypeError:{...}不是JSON可序列化的"(...是来自dict的一些键和值,更多关于以下内容)

问题:程序按照以下格式构建一个大型字典对象:

{
    "<song id>":{
        "artist":"<song artist>",
        "album":"<song album>",
        "title":"<song title>"},
    ...
}
Run Code Online (Sandbox Code Playgroud)

每个歌曲文件都通过此格式编制索引.当我尝试将数据库转储到文件时,我得到了这个:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    sit()
  File "D:\workbench\ideas\musicmanager\v0\spider.py", line 116, in sit
    json.dump(js.db,f,True)
  File "C:\Python27\lib\json\__init__.py", line 181, in dump
    for chunk in iterable:
  File "C:\Python27\lib\json\encoder.py", line 428, in _iterencode
    for chunk in _iterencode_dict(o, _current_indent_level):
  File "C:\Python27\lib\json\encoder.py", line 402, in _iterencode_dict
    for chunk in chunks:
  File "C:\Python27\lib\json\encoder.py", line 402, in _iterencode_dict
    for chunk in chunks:
  File "C:\Python27\lib\json\encoder.py", line 436, …
Run Code Online (Sandbox Code Playgroud)

python json typeerror

45
推荐指数
2
解决办法
11万
查看次数

为什么不调用__instancecheck__?

我有以下python3代码:

class BaseTypeClass(type):
    def __new__(cls, name, bases, namespace, **kwd):
        result = type.__new__(cls, name, bases, namespace)
        print("creating class '{}'".format(name))
        return result

    def __instancecheck__(self, other):
        print("doing instance check")
        print(self)
        print(other)
        return False


class A(metaclass=BaseTypeClass):
    pass

print(type(A))
print(isinstance(A(), A))
Run Code Online (Sandbox Code Playgroud)

当我运行它时,Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32我得到以下输出

creating class 'A'
<class '__main__.BaseTypeClass'>
True
Run Code Online (Sandbox Code Playgroud)

为什么不输出doing instance check?该文件说,__instancecheck__方法需要在元类,而不是类本身,这是我在这里做定义.我甚至验证了自creating class 'A'打印以来正在使用的元类.但是,当我调用isinstance它时似乎使用默认实现而不是我在元类中定义的实现.

我可能没有正确使用元类,但我无法弄清楚我犯了哪些错误.

python metaclass class python-3.x python-3.6

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

Javascript左移操作符如何工作?

我注意到Javascript有一种奇怪的行为:当我执行时,1967779 << 11我得到一个负面结果:-264955904

但是,如果我在Python解释器中运行相同的行,我会得到正确的答案:4030011392

请注意,Firefox和Chrome的Javascript控制台都返回了相同的负数,因此它必须是Javascript本身而不是引擎的问题.

为什么我在Python和Javascript之间获得不同的值?我该怎么做才能解决这个问题?Javascript左移操作符如何工作?

javascript bit-shift bitwise-operators

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