質問するログイン新規登録

回答編集履歴

5

再追記

2017/08/27 21:21

投稿

退会済みユーザー
answer CHANGED
@@ -89,11 +89,21 @@
89
89
  cベースの方のElementTreeを参照してしまい、しかもその中の`iterparse`の実装は、上で示した[古いドキュメント](http://lxml.de/1.3/api/xml.etree.ElementTree-pysrc.html#iterparse.__init__)の
90
90
  ようになっているため、コンストラクタの引数が多すぎるというエラーが出たのではないでしょうか?
91
91
 
92
+ ### 再追記
92
93
 
94
+ 今回の問題となったモジュールである`defusedxml 0.5.0`について、
95
+ [Changelog](https://pypi.python.org/pypi/defusedxml)をみたところ
96
+ この一つ前のversionである`defusedxml 0.5.0.rc1`で
97
+ Python 2.6, 3.1, 3.2, 3.3へのサポートが打ち切りとなっている
98
+ ことがわかりました。
93
99
 
100
+ 今回の環境ではpython3.3が使われているようなので、エラーの原因はさておくとしても、
101
+ python自体のversionは上げたほうがよさそうです。
94
102
 
95
103
 
96
104
 
97
105
 
98
106
 
99
107
 
108
+
109
+

4

誤記の訂正

2017/08/27 21:21

投稿

退会済みユーザー
answer CHANGED
@@ -80,7 +80,7 @@
80
80
  考えられるエラーの原因について、追記します。
81
81
 
82
82
  `ElementTree.py`のコードをよく読んでみると、どうやらElementTreeには、pythonだけで書かれたpythonの標準ライブラリにあるもの(この意味でpure Python)と、cベースのものと2つあるようにみえます。
83
- `_get_py3_cls()`をみるかぎり、前者がpure python codeであり、後がcベースのものに対応するように読めます。
83
+ `_get_py3_cls()`をみるかぎり、上述したコメント中のpure python codeは前者に対応するように思えます。
84
84
 
85
85
  すると、`_get_py3_cls()`がここで果たしている役割は、明示的に前者のライブラリをimportすることにあると考えられます。
86
86
  (上述したコメントの意味するところは、python3.3では普通にimportすると後者を参照してしまうが、defusedxmlは前者のライブラリを参照する必要があると言うことになると思います)

3

エラー原因について追記

2017/08/26 19:58

投稿

退会済みユーザー
answer CHANGED
@@ -74,3 +74,26 @@
74
74
 
75
75
  以上の点から考えると、なんとなくですが、versionの問題が関係しているように思えます。
76
76
  無責任な回答になってしまいますが、pythonのversionを変えると問題が解決するかもしれません。
77
+
78
+ ### 追記
79
+
80
+ 考えられるエラーの原因について、追記します。
81
+
82
+ `ElementTree.py`のコードをよく読んでみると、どうやらElementTreeには、pythonだけで書かれたpythonの標準ライブラリにあるもの(この意味でpure Python)と、cベースのものと2つあるようにみえます。
83
+ `_get_py3_cls()`をみるかぎり、前者がpure python codeであり、後者がcベースのものに対応するように読めます。
84
+
85
+ すると、`_get_py3_cls()`がここで果たしている役割は、明示的に前者のライブラリをimportすることにあると考えられます。
86
+ (上述したコメントの意味するところは、python3.3では普通にimportすると後者を参照してしまうが、defusedxmlは前者のライブラリを参照する必要があると言うことになると思います)
87
+
88
+ そして今回エラーの原因となっているdefusedxml(これは私の提示したものとversionが異なっているはずです)では、こうしたことが考慮されていないか・正常に機能していないがために、
89
+ cベースの方のElementTreeを参照してしまい、しかもその中の`iterparse`の実装は、上で示した[古いドキュメント](http://lxml.de/1.3/api/xml.etree.ElementTree-pysrc.html#iterparse.__init__)の
90
+ ようになっているため、コンストラクタの引数が多すぎるというエラーが出たのではないでしょうか?
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+

2

不正確な部分を訂正

2017/08/26 19:55

投稿

退会済みユーザー
answer CHANGED
@@ -13,7 +13,7 @@
13
13
  をしているからではないでしょうか?
14
14
 
15
15
  ここで、`_iterparse`は`<class 'xml.etree.ElementTree.iterparse'>`であることが、JunYasumuraさんの調査の結果
16
- わかっていますので、エラー元の`__init__`は'xml.etree.ElementTree.iterparse'の`__init__`ではないかと考えられます。
16
+ わかっていますので、エラー元の`__init__`は`xml.etree.ElementTree.iterparse`の`__init__`ではないかと考えられます。
17
17
 
18
18
  ちなみに、[古いドキュメント](http://lxml.de/1.3/api/xml.etree.ElementTree-pysrc.html#iterparse.__init__)の`__init__`は、
19
19
  ```
@@ -69,14 +69,8 @@
69
69
  という部分に、
70
70
  "Python3.3は**pure Python**コードを隠蔽しているが、defusedxmlにはそれが必要である"
71
71
  というコメントがあります。
72
- これが意味していることがよくわからない(pure Pythonとはなんなか?)のですが、少し関係ありそうなにおいがします。
72
+ これが意味していることがよくわからないのですが、少し関係ありそうなにおいがします。
73
73
 
74
- pure Pythonが仮にlxmlモジュールの中にある`xml.etree.ElementTree`のことをさしているのであるとすれば、
75
- この文は、
76
- " Python3.3はpythonの標準ライブラリの中にあるElementTreeを参照するが、defusedxmlにはlxmlの方のElementTreeが必要である"
77
- というふうに解釈できるかもしれません。
78
74
 
79
-
80
-
81
75
  以上の点から考えると、なんとなくですが、versionの問題が関係しているように思えます。
82
76
  無責任な回答になってしまいますが、pythonのversionを変えると問題が解決するかもしれません。

1

修正

2017/08/26 19:05

投稿

退会済みユーザー
answer CHANGED
@@ -67,10 +67,16 @@
67
67
  ```
68
68
 
69
69
  という部分に、
70
- Python3.3は**pure Python**コードを隠蔽しているが、defusedxmlにはそれが必要である
70
+ "Python3.3は**pure Python**コードを隠蔽しているが、defusedxmlにはそれが必要である"
71
71
  というコメントがあります。
72
72
  これが意味していることがよくわからない(pure Pythonとはなんなのか?)のですが、少し関係ありそうなにおいがします。
73
73
 
74
+ pure Pythonが仮にlxmlモジュールの中にある`xml.etree.ElementTree`のことをさしているのであるとすれば、
75
+ この文は、
76
+ " Python3.3はpythonの標準ライブラリの中にあるElementTreeを参照するが、defusedxmlにはlxmlの方のElementTreeが必要である"
77
+ というふうに解釈できるかもしれません。
74
78
 
79
+
80
+
75
81
  以上の点から考えると、なんとなくですが、versionの問題が関係しているように思えます。
76
- 無責任な回答になってしまいますが、pythonのversionを変えると問題が解決するかもしれません。
82
+ 無責任な回答になってしまいますが、pythonのversionを変えると問題が解決するかもしれません。