我有FTP代码,我使用__name__ == '__main__'
方法进行测试,该方法在某些条件下工作,而在其他条件下失败。这基本上是使用用户名密码对站点进行FTP,然后遍历到我们需要使用ftplib
模块将文件归档的目录中。如果在Dir路径中找不到文件,我一直保持异常处理,然后出现错误。
#!/usr/bin/python3
import ftplib
from ftplib import FTP
def FtpMirroList():
with FTP("ftp.rraka.com") as ftp:
ftp.login("rar1", "Hf090rFD")
ftp.cwd("mirror/Nimble/1522_rc/optimize_gather/")
#ftp.retrlines('LIST')
try:
FileList = ftp.retrlines('LIST')
except ftplib.error_perm as resp:
if str(resp) == "550 No files found":
print("No files in this directory")
else:
raise
def main():
for files in FtpMirroList():
print(files)
#main()
if __name__ == '__main__':
FtpMirroList()
当我在没有main()
的情况下执行此操作时,我在代码中进行了哈希处理,然后运行正常。
$ ./ftplib-example-4.py
total 19535864
-rw-r--r-- 1 rar1 ftpsecure 9963085277 Jan 09 07:09 15.22.s039.20180109-043530_pslv3.tar.gz
-rw-rw-r-- 1 rar1 ftpsecure 387 Jan 09 06:02 15.22.s039.20180109-043530_pslv3.tar.gz.README
-rw-rw-r-- 1 rar1 ftpsecure 9963166015 Jan 09 14:08 15.22.s039.20180109-164514_pslv3.tar.gz
-rw-rw-r-- 1 rar1 ftpsecure 387 Jan 09 14:11 15.22.s039.20180109-164514_pslv3.tar.gz.README
如果我将使用main()
运行此代码,则会产生'NoneType' object
的错误,如下所示:
Traceback (most recent call last):
File "./ftplib-example-4.py", line 22, in <module>
main()
File "./ftplib-example-4.py", line 19, in main
for files in FtpMirroList():
TypeError: 'NoneType' object is not iterable
请在使用功能并致电__name__ == '__main__'
时建议使用main()
方法时使用最佳做法。
我看到没有必要第二个功能...编辑后 按预期工作
#!/usr/bin/python3
import ftplib
from ftplib import FTP
def FtpMirroList():
with FTP("ftp.rraka.com") as ftp:
ftp.login("rar1", "Hf090rFD")
ftp.cwd("mirror/Nimble/1522_rc/optimize_gather/")
#ftp.retrlines('LIST')
try:
FileList = ftp.retrlines('LIST')
except ftplib.error_perm as resp:
if str(resp) == "550 No files found":
print("No files in this directory")
else:
raise
for files in FileList:
print(files)
if __name__ == '__main__':
FtpMirroList()
答案 0 :(得分:0)
我在主函数return
中使用FtpMirroList
关键字并最后通过if __name__ == '__main__':
调用它并按预期工作,以另一种方式更正了问题。
#!/usr/bin/python3
import ftplib
from ftplib import FTP
def FtpMirroList():
with FTP("ftp.rraka.com") as ftp:
ftp.login("rar1", "Hf090rFD")
ftp.cwd("mirror/Nimble/1522_rc/optimize_gather/")
#ftp.retrlines('LIST')
try:
FileList = ftp.retrlines('LIST')
except ftplib.error_perm as resp:
if str(resp) == "550 No files found":
print("No files in this directory")
else:
raise
for files in FileList:
return files
if __name__ == '__main__':
FtpMirroList()