在函数结束(例如检查失败)之前在 python 中退出函数(没有返回值)的最佳方法是啥?

Posted

技术标签:

【中文标题】在函数结束(例如检查失败)之前在 python 中退出函数(没有返回值)的最佳方法是啥?【英文标题】:What is the best way to exit a function (which has no return value) in python before the function ends (e.g. a check fails)?在函数结束(例如检查失败)之前在 python 中退出函数(没有返回值)的最佳方法是什么? 【发布时间】:2011-09-05 15:42:45 【问题描述】:

让我们假设一个迭代,我们调用一个没有返回值的函数。这个伪代码解释了我认为我的程序应该表现的方式:

for element in some_list:
    foo(element)

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        return None
    do much much more...

如果我在 python 中实现它,我会感到困扰,该函数返回一个None。有没有更好的方法来“退出一个没有返回值的函数,如果函数体中的检查失败”?

【问题讨论】:

如果你没有明确地返回一些东西,Python 总是返回 None 。但是您可以将“无”关闭。 根据检查的内容,您还可能raise 一个异常(或者,很少使函数返回 True/False) 【参考方案1】:
    return Nonereturn 可用于退出函数或程序,两者的作用相同 可以使用quit() 函数,但不鼓励在实际应用中使用此函数,并且只能在解释器中使用。
    import site
    
    def func():
        print("Hi")
        quit()
        print("Bye")
    可以使用exit() 函数,类似于quit(),但不鼓励在实际应用中使用。
import site
    
    def func():
        print("Hi")
        exit()
        print("Bye")
    sys.exit([arg]) 函数可以使用,但需要import sys 模块,此函数可用于实际应用,与其他两个函数不同。
import sys 
  height = 150
  
if height < 165: # in cm 
      
    # exits the program 
    sys.exit("Height less than 165")     
else: 
    print("You ride the rollercoaster.") 
    os._exit(n)函数可用于退出进程,需要import os模块。

【讨论】:

【参考方案2】:

我建议:

def foo(element):
    do something
    if not check: return
    do more (because check was succesful)
    do much much more...

【讨论】:

【参考方案3】:

您可以使用不带任何参数的return 语句退出函数

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        return
    do much much more...

如果您想了解问题,请引发异常

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        raise Exception("cause of the problem")
    do much much more...

【讨论】:

【参考方案4】:

你可以简单地使用

return

完全一样
return None

如果执行到达函数体的末尾而没有遇到return 语句,您的函数也将返回None。不返回任何内容与在 Python 中返回 None 相同。

【讨论】:

return 不起作用,如果我设置 a = method() ,在我使用 return 的方法内部,它仍然会继续运行代码。 exit 应该像 php exit() 一样,它会立即中断程序。 @TomSawyer 提前停止 Python 程序,如果要退出但报告成功,请先执行 import sys,然后执行 sys.exit()sys.exit("some error message to print to stderr") @Boris,这就是我要找的东西,这对我有用。 @TomSawyer 您要求的是different question 的主题!普通的return 非常适合this OP 描述的内容。

以上是关于在函数结束(例如检查失败)之前在 python 中退出函数(没有返回值)的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

windows下gethostbyname 调用失败

idea构建失败?

Python入门教程第62篇 函数进阶之类型提示

如何检查python函数是否更改(在实时代码中)?

卸载失败,因为程序正在运行。如何在尝试删除之前让 Inno Setup 检查正在运行的进程?

基本自定义检查 python 模块加载失败