python中的递归方法
Recursive method in python
我正在尝试通过 ftp 将 csv 文件发送到远程服务器,但有时我会收到套接字错误:
现在我想让函数恢复,这样如果函数无法通过 ftp 发送文件,它应该重试。这就是我正在做的,即使第一次尝试连接失败,我如何才能成功上传文件。
def upload(ftp,file_path):
os.chdir(file_path)
files=glob.glob('*.csv')
for filename in files:
print filename
ftp.storbinary("STOR " + filename, open(filename, "rb"), 1024)
time.sleep(1)
ftp=FTP(ftp_server)
ftp.login(ftp_user,ftp_password)
ftp.cwd("/test")
file_path='/test'
upload(ftp,file_path)
我收到以下错误:
回溯(最近调用最后):
File "file_upload.py", line 205, in <module>
upload(ftp,file_path)
File "file_upload.py", line 105, in upload
ftp.storbinary("STOR " + filename, open(filename, "rb"), 1024)
File "/usr/lib/python2.7/ftplib.py", line 470, in storbinary
self.voidcmd('TYPE I')
File "/usr/lib/python2.7/ftplib.py", line 253, in voidcmd
self.putcmd(cmd)
File "/usr/lib/python2.7/ftplib.py", line 181, in putcmd
self.putline(line)
File "/usr/lib/python2.7/ftplib.py", line 176, in putline
self.sock.sendall(line)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 104] Connection reset by peer
使用 try/except 捕获套接字错误:
from socket import error
for filename in files:
try:
print filename
ftp.storbinary("STOR " + filename, open(filename, "rb"), 1024)
time.sleep(1)
except error as e:
print(e)
如果您想重试多次,请使用内部循环,如果调用成功则中断,否则重试 n
次:
for filename in files:
for ty in range(n):
try:
print filename
ftp.storbinary("STOR " + filename, open(filename, "rb"), 1024)
time.sleep(1)
break
except error as e:
print(e)
您可以将 n
传递给您的函数来决定您想要重试多少次:
def upload(ftp, file_path, n):
os.chdir(file_path)
files = glob.glob('*.csv')
for filename in files:
for ty in range(n):
try:
print filename
# with will close your file
with open(filename, "rb") as f:
ftp.storbinary("STOR {}".format(filename), f, 1024)
time.sleep(1)
break
except error as e:
print(e)
您可以使用 while True
循环,但这可能会永远循环
我正在尝试通过 ftp 将 csv 文件发送到远程服务器,但有时我会收到套接字错误:
现在我想让函数恢复,这样如果函数无法通过 ftp 发送文件,它应该重试。这就是我正在做的,即使第一次尝试连接失败,我如何才能成功上传文件。
def upload(ftp,file_path):
os.chdir(file_path)
files=glob.glob('*.csv')
for filename in files:
print filename
ftp.storbinary("STOR " + filename, open(filename, "rb"), 1024)
time.sleep(1)
ftp=FTP(ftp_server)
ftp.login(ftp_user,ftp_password)
ftp.cwd("/test")
file_path='/test'
upload(ftp,file_path)
我收到以下错误:
回溯(最近调用最后):
File "file_upload.py", line 205, in <module>
upload(ftp,file_path)
File "file_upload.py", line 105, in upload
ftp.storbinary("STOR " + filename, open(filename, "rb"), 1024)
File "/usr/lib/python2.7/ftplib.py", line 470, in storbinary
self.voidcmd('TYPE I')
File "/usr/lib/python2.7/ftplib.py", line 253, in voidcmd
self.putcmd(cmd)
File "/usr/lib/python2.7/ftplib.py", line 181, in putcmd
self.putline(line)
File "/usr/lib/python2.7/ftplib.py", line 176, in putline
self.sock.sendall(line)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 104] Connection reset by peer
使用 try/except 捕获套接字错误:
from socket import error
for filename in files:
try:
print filename
ftp.storbinary("STOR " + filename, open(filename, "rb"), 1024)
time.sleep(1)
except error as e:
print(e)
如果您想重试多次,请使用内部循环,如果调用成功则中断,否则重试 n
次:
for filename in files:
for ty in range(n):
try:
print filename
ftp.storbinary("STOR " + filename, open(filename, "rb"), 1024)
time.sleep(1)
break
except error as e:
print(e)
您可以将 n
传递给您的函数来决定您想要重试多少次:
def upload(ftp, file_path, n):
os.chdir(file_path)
files = glob.glob('*.csv')
for filename in files:
for ty in range(n):
try:
print filename
# with will close your file
with open(filename, "rb") as f:
ftp.storbinary("STOR {}".format(filename), f, 1024)
time.sleep(1)
break
except error as e:
print(e)
您可以使用 while True
循环,但这可能会永远循环