質問
次のような引数の数が違うというエラーが出た場合、どのようにして問題となる__init__ を特定すればよいでしょうか?
TypeError: __init__() takes from 2 to 3 positional arguments but 4 were given
エラーの出る状況
CentOS release 6.9 (Final) x86_64 さくらのクラウドの環境で、s3ql をマウントする時にこのエラーが出ます。
# LD_PRELOAD=/usr/lib/libfuse.so.2 mount.s3ql --cachedir /var/cache/s3ql --authfile /root/.s3ql/authinfo2 --compress none --cachesize 1048576 --allow-other s3c://b.sakurastorage.jp/******* /mnt/test Using 2 upload threads. Autodetected 4058 file descriptors available for cache entries ERROR: Uncaught top-level exception: Traceback (most recent call last): File "/usr/bin/mount.s3ql", line 12, in <module> load_entry_point('s3ql==2.22', 'console_scripts', 'mount.s3ql')() File "/usr/lib64/python3.3/site-packages/s3ql-2.22-py3.3-linux-x86_64.egg/s3ql/mount.py", line 129, in main (param, db) = get_metadata(backend, cachepath) File "/usr/lib64/python3.3/site-packages/s3ql-2.22-py3.3-linux-x86_64.egg/s3ql/mount.py", line 358, in get_metadata seq_no = get_seq_no(backend) File "/usr/lib64/python3.3/site-packages/s3ql-2.22-py3.3-linux-x86_64.egg/s3ql/common.py", line 45, in get_seq_no seq_nos = list(backend.list('s3ql_seq_no_')) File "/usr/lib64/python3.3/site-packages/s3ql-2.22-py3.3-linux-x86_64.egg/s3ql/backends/common.py", line 108, in wrapped return method(*a, **kw) File "/usr/lib64/python3.3/site-packages/s3ql-2.22-py3.3-linux-x86_64.egg/s3ql/backends/common.py", line 217, in __next__ el = next(self.iterator) File "/usr/lib64/python3.3/site-packages/s3ql-2.22-py3.3-linux-x86_64.egg/s3ql/backends/s3c.py", line 249, in list itree = iter(ElementTree.iterparse(self.conn, events=("start", "end"))) File "/usr/lib/python3.3/site-packages/defusedxml-0.5.0-py3.3.egg/defusedxml/common.py", line 113, in iterparse return _iterparse(source, events, parser) TypeError: __init__() takes from 2 to 3 positional arguments but 4 were given
調査したこと、考えたこと
この時、この関数の呼び出し時に、引数の数が違うよというエラーが出ているのだと思います。
return _iterparse(source, events, parser)
この時点でのそれぞれの変数の中身は次のようになっていました。
source: <dugong.HTTPConnection object at 0x7f0664b607d0> events: ('start', 'end') parser: <defusedxml.ElementTree.DefusedXMLParser object at 0x7f0664b78f10> _iterparse: <class 'xml.etree.ElementTree.iterparse'>
pdb を使って問題となる行、
File "/usr/lib/python3.3/site-packages/defusedxml-0.5.0-py3.3.egg/defusedxml/common.py", line 113, in iterparse return _iterparse(source, events, parser)
にブレークポイントをしかけ、この行からStep で辿ろうと考えたのですが、
113 B-> return _iterparse(source, events, parser) (Pdb) s TypeError: __init__() takes from 2 to 3 positional arguments but 4 were given > /usr/lib/python3.3/site-packages/defusedxml-0.5.0-py3.3.egg/defusedxml/common.py(113)iterparse() -> return _iterparse(source, events, parser) (Pdb)
問題となる_ init_ にいく遷移が示されないまま、即TypeError が出てしまい、どのように追跡したらよいのかがわからなくなりました。
この場合の処方箋について教えてください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。