__init__() 在 python/django 中得到了一个意外的关键字参数“mime”
Posted
技术标签:
【中文标题】__init__() 在 python/django 中得到了一个意外的关键字参数“mime”【英文标题】:__init__() got an unexpected keyword argument 'mime' in python/django 【发布时间】:2012-09-18 12:45:58 【问题描述】:.py 文件中此代码的第一行返回错误。
mime = magic.Magic(mime=True)
content_type = mime.from_buffer((data).read(1024))
request.session['content_type'] = content_type
if content_type == 'application/pdf' or content_type == 'application/msword':
request.session['upload_status'] = "Content type is valid according to (MAGIC)"
错误信息是
__init__() got an unexpected keyword argument 'mime'
我正在使用 Django 1.4.1 和 Python 2.7.3。我安装了魔法。不知道出了什么问题 - 任何帮助表示赞赏!
【问题讨论】:
what is Magic(mime=True) 你能展示一下Magic模型的__init__
方法吗
使用 ctrl-k 显示代码块。
感谢 swang,请记住这一点! :)
【参考方案1】:
只是在黑暗中刺伤,但 documentation 建议您不应该直接实例化 Magic
类。
import magic
magic.from_buffer(open("testdata/test.pdf").read(1024))
【讨论】:
其实,现在我得到以下错误: AttributeError: 'module' object has no attribute 'from_buffer' (even from python command line) 您使用的是什么版本?你是从github安装的吗?当您键入dir(magic)
时,对象可以使用哪些方法?我刚刚搜索了文档并且正在关闭我在 github 中找到的内容,也许您使用的是另一个版本?
您可以输入magic.version
以便我们找出版本并查找相应的文档吗?
magic.version 说这个“Magic 对象的构造函数不接受名为“mime”的参数。我建议用 help(magic.Magic); 查看文档字符串。它可能会给你一个线索。
【讨论】:
【参考方案3】:根据上述建议,如果与 JIRA 服务器的连接失败并出现错误:
The error message is __init__() got an unexpected keyword argument 'mime'
然后去编辑
/usr/lib/python2.7/site-packages/jira/client.py
替换
self._magic = magic.Magic(mime=True)
与
self._magic = magic
然后像这样运行代码:
from jira.client import JIRA
import magic
...
jira = JIRA(options='server':'https://jira.server.goes.here', basic_auth=(options.username, options.password))
我正在使用带有 jira-python 的 python 2.7.3 (http://jira-python.readthedocs.org/en/latest/)
【讨论】:
这很好地解决了问题。 Below,我已经提供了一些详细信息,应该有助于解释为什么需要进行此更改。【参考方案4】:您很可能拥有另一个版本的magic
。如果我上次查看这些东西时没记错的话,Ubuntu 附带了一个不同的版本(也许还有一个叫做filemagic
的东西)。开箱即用的 Cygwin 版本也是如此。这就是我的情况。
我重新安装了 Cygwin 并遇到了同样的问题 - Python 的 magic
/ python-magic
/ filemagic
的两个版本。我在这里查看了 SO 的解决方案,但没有很快找到。幸运的是,我保留了以前的笔记,对我有用的解决方案是:
$ sudo pip3 uninstall filemagic
$ sudo pip3 install python-magic
或者,什么在我的 Cygwin 安装上效果更好:
$ python -m pip uninstall filemagic
$ python -m pip install python-magic
这解决了我的问题。
当我搜索有关此问题的更多信息时,我在 github 上遇到了一个非常相似的解决方案 here (archived)。还有一个步骤。
卸载filemagic:
sudo pip3 uninstall filemagic
卸载python-magic:
sudo pip3 uninstall python-magic
(可能的添加)
sudo apt-get uninstall python-magic
安装python-magic:
sudo pip3 install python-magic
通过快速搜索,我找不到magic
的两个版本的详细信息。我刚刚在线程上发现一些 cmets 说,“你必须有另一个版本的 magic
”,或者“你必须有另一个版本的 magic
”。
编辑
我已经用magic
来源更新了这个答案。由此看来,您可能需要在安装 python-magic
和 pip
之前执行另一个命令
sudo apt-get uninstall python-magic
如上所述。
编辑
我找到了有关 magic
不同版本的详细信息。
我有以下三个链接(first、second、third)
基本上,有两个版本。获得最多支持的是 PYPI,而且(在我看来)使用得更频繁。目前是v.0.4.15(2020-02-19),它的github页面是第一个链接。在该页面上,您可以阅读以下内容:
名称冲突
遗憾的是,有两个库使用模块名称
magic
。两者都已经存在了很长一段时间。如果您正在使用此模块并使用open
之类的方法出现错误,则您的代码需要另一个。希望有朝一日这些会被调和。
目前看来问题最多的第二个版本是 (2020-02-19) v5.25。根据第三个链接和我自己的研究,当有人在某些版本的 Ubuntu 上使用 sudo apt-get install python-magic
时,会安装这个链接。 (请查看 here 以了解来自 Ubuntu 的一些可能的详细信息。)
在第二个链接中可以找到对所有这一切的最佳解释。向@mhawke 的道具解释得这么好。
以下是上述链接的存档版本:archived first、archived second、archived third、archived Ubuntu information。
【讨论】:
以上是关于__init__() 在 python/django 中得到了一个意外的关键字参数“mime”的主要内容,如果未能解决你的问题,请参考以下文章
对 def __init__ 中的 __init__ 方法感到困惑