Python3` __name__ ==' __ main __&#39 ;:执行paractices&执行

时间:2018-01-10 08:12:48

标签: python python-3.x ftp

我有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()

1 个答案:

答案 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()
相关问题