У меня есть следующий код, но я не получаю никакого вывода. Я побежал PDB в этом, и получил следующее:python * args не называется
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()'.
Может ли кто-нибудь указать, что здесь не так, и как я могу это исправить.
# #Спасибо за ответы на все вопросы.
Это была часть класса, вот почему thisweextract() имел себя. Я полностью пропустил его, устраняя эту проблему. Спасибо всем, что указали это.
Я снял его, сделал предложенные изменения, а функция будет выглядеть так:
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()?