我有以下代码,但我没有得到任何输出。我在其中运行了一个 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__
,我不应该将 args 作为 sys.argv[1:] 传递,因为它返回一个列表。还是我错了?我应该在 hereweextract() 中传递什么?