【问题标题】:How to make sure try/except loop doesn't execute everything if an exception occurs?如果发生异常,如何确保 try/except 循环不会执行所有操作?
【发布时间】:2021-04-06 22:11:40
【问题描述】:

假设我有这个代码:

def my_func():
    print("Hello World")  # <-- This should work
    print(x)  # <-- This should NOT work, since x is undefined


try:
    my_func()
    # However, in my try-except loop, the function is being partially executed. 
    # I want it so that if there is an error, the function shouldn't execute at all, and nothing should happen
except Exception as e:
    print(e)

我想要发生的是执行该函数,但是如果发生错误,则根本不执行该函数。我不知道这对于try/except 循环是否可行,因为这样做的目的是执行代码直到出现错误,但可能还有其他一些循环可以实现这一点。 抱歉,我知道这是一个非常初学者的问题,我可能应该知道这一点,但我是自学成才的,从来没有遇到过这个问题,也不知道该怎么做才能解决这个问题。谢谢!

【问题讨论】:

  • 不运行怎么知道有没有错误?
  • 理论上是不可能的。您将不得不重新设计程序,例如,在执行函数之前执行一些检查,而不是 try/except
  • try/except 不是“循环”。
  • try/except 是处理在执行代码之间时发生的Exceptions - 所以你问什么没有意义。
  • 好的,只是想知道这是否可能。感谢所有有用的回复!我确实认为从逻辑上讲这是不可能的,但是,我对代码了解不多,所以我只是想知道这是否可能。而且,@KarlKnechtel,老实说,我不知道该怎么称呼它,“循环”听起来不错。

标签: python try-catch try-except


【解决方案1】:

如前所述,你想要的东西是不可能的。但是,您可以做的是以不同的方式构造代码,以便函数运行需要 x:

def my_func(x):
    print("Hello World")
    print(x)

my_func(x)  # Will raise an error if x is not provided

或者,您可以预先检查您需要的任何变量:

try:
    x
    # any other variable you need
    # this can also be done inside the function itself (probably better to do that tbh)
    my_func()

except NameError as e:
    print(e)

我知道未分配的变量可能不是您遇到的确切问题,但无论哪种方式,如果您不希望函数执行重要的操作并中途失败,请事先运行一些检查,即使只是在函数本身内部,以确保它有最好的完成机会。希望这对您有所帮助,如果不是您想要的,请见谅。

【讨论】:

  • 感谢您的解释!你的回答和所有的 cmets 真的帮了大忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 2018-12-30
相关资源
最近更新 更多