次のコードを取得しましたが、出力が得られません。これでpdbを実行したところ、次の結果が得られました。
import tarfile
import sys
def hereweextract(self, *args):
for i in args:
try:
f = tarfile.open(i)
print("Extracting ", i)
f.extractall()
f.close()
except tarfile.ReadError:
sys.exit("File not a tarball, or any of .xz/.bz2/.gz archives.")
if __name__ == "__main__":
hereweextract(sys.argv[1:])
これで pdb を実行したところ、次の結果が得られました。
>>> python ll.py file1.tar.xz file2.tar.xz
> /tmp/kk/ll.py(11)<module>()
-> def hereweextract(self, *args):
(Pdb) n
> /tmp/kk/ll.py(22)<module>()
-> if __name__ == "__main__":
(Pdb)
> /tmp/kk/ll.py(23)<module>()
-> hereweextract(sys.argv[1:])
(Pdb)
--Return--
> /tmp/kk/ll.py(23)<module>()->None
-> hereweextract(sys.argv[1:])
(Pdb)
Exception AttributeError: "'NoneType' object has no attribute 'path'" in <function _remove at 0x7f5dc8e596e0> ignored
なぜこれが起こっているのか、コードの何が問題なのかはわかりません。「hereweextract()」関数にさえ到達していません。関数「hereweextract()」に引数を渡す方法について、その何かを理解しています。
ここで何が問題なのか、どうすればこれを修正できるのか、誰でも指摘できますか。
# #すべての回答に感謝します。
これはクラスの一部でした。それが、hereweextract() が自己を持つ理由です。この機能のトラブルシューティング中に、私はそれを完全に見逃していました。それを指摘してくれてありがとう。
私はそれを削除し、提案された変更を加えました。関数は次のようになります。
import os
import tarfile
import sys
import pdb
pdb.set_trace()
def hereweextract(*args):
print args
for i in args:
try:
f = tarfile.open(i)
print("Extracting ", i)
f.extractall()
f.close()
except tarfile.ReadError:
sys.exit("File not a tarball, or any of .xz/.bz2/.gz archives.")
if __name__ == "__main__":
hereweextract(*sys.argv[1:])
このコードでは、次の pdb トレースが表示されます。
>>> python ll.py file1.tar.xz file2.tar.xz
> /tmp/kk/ll.py(11)<module>()
-> def hereweextract(*args):
(Pdb) n
> /tmp/kk/ll.py(22)<module>()
-> if __name__ == "__main__":
(Pdb)
> /tmp/kk/ll.py(23)<module>()
-> hereweextract(*sys.argv[1:])
(Pdb)
['file1.tar.xz', 'file2.tar.xz']
SystemExit: 'File not a tarball, or any of .xz/.bz2/.gz archives.'
> /tmp/kk/ll.py(23)<module>()
-> hereweextract(*sys.argv[1:])
(Pdb)
--Return--
> /tmp/kk/ll.py(23)<module>()->None
-> hereweextract(*sys.argv[1:])
(Pdb)
File not a tarball, or any of .xz/.bz2/.gz archives.
__main__
では、リストを返すため、引数を sys.argv[1:] として渡すべきではないことを理解しています。それとも私は間違っていますか?hereweextract() で何を渡す必要がありますか?