我正在用Python编写一个自定义备份脚本。有时mkdir函数或print函数或任何函数由于各种原因而失败。这样的异常会使整个脚本停止,并在中途停止备份,这是非常令人沮丧的。到目前为止,我已经通过添加try:...except:...语句并正确管理这些异常来管理这些问题。但是,有一天,某个其他语句或函数也可能因为尚未触发的其他原因而引发异常。
有没有一种方法告诉脚本继续进行?是否相当于在try:...except:pass子句中包装代码的每个语句?木头当然更好。
我注意到,在使用像Tkinter这样的GUI工具包编程时,即使引发异常,应用程序也保持运行。有可能用控制台完成这种类型的事情吗?
实际上,有一个模块可以做到这一点:https://github.com/ajalt/fuckitpy。
虽然明明是写成笑话的。我无法想象这样做是个好主意。天啊,真不敢相信我竟然把这个当作解决办法。
相反,您应该做的是识别哪些代码行可以产生什么样的错误,并正确地处理那些错误。只有这么多的地方会发生错误--主要是在与外部系统(包括文件系统、网络、用户输入等)接口时发生错误。记住,实际失败通常比继续“工作”和弄乱数据、文件等要好。例外是有原因的,它们不是圭多恶意的结果。
Python没有办法做到这一点,而且有很好的理由。
您似乎对编写“健壮”软件意味着什么感到困惑:一个健壮的程序不是一个很难干掉的程序,不管发生什么事情都能继续运行,而是一个能正确处理边缘情况的程序。不停地跑是不够的...坚持跑步,做明智的事情是关键。
不幸的是,没有办法自动地做合理的事情,您必须逐个考虑如何处理错误。
注意,如果一个程序有很多catch
,它很少是一个好的程序。异常应该在很多地方被提出,但几乎没有被发现。
还要注意,每个catch
都可能是bug的来源...例如:
try:
print my_dict[foo()]
except KeyError:
...
无法区分keyerror
是用于访问my_dict
中不存在的键,还是从foo()
转义。这两种情况很少会被处理得一样。
更好的是写:
key = foo()
if key in my_dict:
print my_dict[key]
else:
...
因此只处理my_dict
中缺少键的附带情况,而keyerror
异常将停止程序(当您不确定程序正在做什么时停止程序是唯一合理的做法)。
问题内容: 当你只想执行但不处理异常时,如何在Python中进行呢? 以下是正确的方法吗? 问题答案: 要么 所不同的是,第一个也将赶上KeyboardInterrupt,SystemExit和类似的东西,这是直接来源于,没有
问题内容: 我有以下代码: 我想执行:即使(上面的行)抛出异常。除了: 我连续有很多test.setSomething,它们都可能引发异常。如果他们这样做,我只想跳过这一行,移至下一行。 为了澄清起见,我不在乎它是否引发异常,并且我无法编辑引发此异常的代码的源代码。 这是我不关心例外的情况(请不要使用通用量化的语句,例如“您永远不要忽略异常”)。我正在设置某些对象的值。当我向用户提供值时,无论如何
问题内容: 我的代码中有一个try … except块,当抛出异常时。我真的只想继续编写代码,因为在这种情况下,所有内容仍然可以正常运行。问题是,如果您将except:块保留为空或不执行任何操作,则会出现语法错误。我不能使用continue,因为它不在循环中。我可以使用一个关键字来告诉代码继续运行吗? 问题答案: except Exception: pass 适用于pass语句的Python文档
如果在Java代码中调用,下面的方法将警告,但将忽略Kotlin中的任何警告,因为是已检查的异常。 Java迫使开发人员在抛出异常时采取安全措施,但在Kotlin中,它只是忽略了异常,从而产生了潜在的bug源。我确信有很多类似的情况,检查的异常被忽略了。 问题是如何处理这样的案件?
我想使用他们的Rest Apis在Marketo中获取所有潜在客户。有没有办法做到这一点?我已经尝试了getLeadChange api,但是它只返回具有更改字段的潜在客户。
我必须实现一个错误处理程序,它在发送SOAP请求并处理其响应的业务流程上使用Camel重新交付策略。在process部分期间,可以抛出一个特殊的异常(RetryException)。这个异常是在错误处理程序级别捕获的(多亏了onException(RetryException.Class))。这是最简单的部分。 现在,我想忽略cxfendpoint可能抛出的异常(在每个示例出现连接错误的情况下),