如何忽略和跳过Python sftp错误

如何忽略和跳过Python sftp错误,python,sftp,Python,Sftp,我有这段Python代码,它创建了一个桌面截图(png)并保存在本地,然后通过sftp连接到远程服务器并远程上传截图文件。 使用sftp。但是,如果远程sftp服务器关闭,它工作正常 脚本以错误结束。如果远程服务器sftp关闭,如何忽略和跳过错误 ,我希望避免脚本停止,而是在本地保存文件 import mss import mss.tools import datetime import time import pysftp as sftp count = 0 while count <

我有这段Python代码,它创建了一个桌面截图(png)并保存在本地,然后通过sftp连接到远程服务器并远程上传截图文件。 使用sftp。但是,如果远程sftp服务器关闭,它工作正常 脚本以错误结束。如果远程服务器sftp关闭,如何忽略和跳过错误 ,我希望避免脚本停止,而是在本地保存文件

import mss
import mss.tools
import datetime
import time
import pysftp as sftp


count = 0
while count < 100000000:
    with mss.mss() as sct:
        monitor = sct.monitors[1]
        timestr = time.strftime("%Y%m%d-%H%M%S")
        sct.compression_level = -1
        output = "d:/screen/work/" + (timestr) + ".png".format(**monitor)
        sct_img = sct.grab(monitor)
        mss.tools.to_png(sct_img.rgb, sct_img.size, output=output)
        print(output)   
        s = sftp.Connection(host='127.0.0.1', username='admin', password='********')
        local_path = "" +(output)+ ""
        remote_path = ""
        s.put(local_path, remote_path)
        s.close()


    time.sleep(10)
    count += 1

将连接包装在
中,然后重试。。。除此之外,类似so的块将允许您在不终止程序的情况下处理错误:

# first part of your code here
try:
    s = sftp.Connection(host='127.0.0.1', username='admin', password='********')
    local_path = "" +(output)+ ""
    remote_path = ""
    s.put(local_path, remote_path)
    s.close()
except Exception as e:
    # do something with e here, e.g. print a log statement
    # your code for saving a local copy goes here as well
# rest of your code goes here

请注意,您应该将我的通用
异常
替换为您遇到的连接错误,以便在连接和传输数据时不会忽略任何其他可能出现的错误,因为其他错误可能无法轻松忽略

您可以使用
try.…除了
块来捕获以下所有异常:

导入mss
导入mss.tools
导入日期时间
导入时间
将pysftp作为sftp导入
计数=0
当计数小于100000000时:
使用mss.mss()作为sct:
监视器=sct.监视器[1]
timestr=time.strftime(“%Y%m%d-%H%m%S”)
sct.compression_level=-1
output=“d:/screen/work/”+(timestr)+“.png”。格式(**监视器)
sct_img=sct.抓斗(监视器)
mss.tools.to_png(sct_img.rgb,sct_img.size,output=output)
打印(输出)
尝试:
s=sftp.Connection(host=“127.0.0.1”,username=“admin”,password=“*******”)
本地_路径=“+(输出)+”
远程路径=“”
s、 put(本地路径、远程路径)
s、 关闭()
除:
打印(“无法连接到ftp”)
返回错误
时间。睡眠(10)
计数+=1
但是,不建议盲目捕获所有异常。您应该检查出现错误时引发的异常,并具体如下使用:

试试看:
“…可能引发错误的代码块…”
除零误差外:
打印(“出现零除法错误”)
除值错误外:
打印(“出现值错误”)

然而,如果您无法预测可能会出现什么错误,并且必须盲目地捕获异常,那么至少要做
日志记录。您可以看到有关捕获和记录异常的更多信息

将连接包装在
try。。。除了
块和处理错误之外,我尝试了它,但是我陷入了缩进错误:应该是缩进块,你能帮我更多地显示代码吗(我不懂Python,只是一些东西)。您也可以这样做。现在,它在ftp运行时返回:Exception作为e^SyntaxError:无效语法。如果没有ftp连接,我只想跳过sftp作业。你能分享你的代码吗?此结构适用于我请忽略上面的文件,除非需要缩进少一级,并且您还需要在该块中定义一些语句。现在,您只需输入
pass
I receive“第27行异常除外:^SyntaxError:invalid syntax”您是否尝试了我给出的第一个示例(将所有内容都放入try…除了块)?代码段有25行长。由于解释器在第27行显示错误,该语法错误可能是从其他地方弹出的。请根据您的更新更新答案。请再试一次。我使用的正是上面的代码,再次出现错误文件“d:/screen/screen.py”,第30行返回False^SyntaxError:“return”在函数外部
  s = sftp.Connection(host='127.0.0.1', username='admin', password='******')
    ^
IndentationError: expected an indented block
# first part of your code here
try:
    s = sftp.Connection(host='127.0.0.1', username='admin', password='********')
    local_path = "" +(output)+ ""
    remote_path = ""
    s.put(local_path, remote_path)
    s.close()
except Exception as e:
    # do something with e here, e.g. print a log statement
    # your code for saving a local copy goes here as well
# rest of your code goes here