如何退出Python函数,同时抛出错误而不退出解释器

24 投票
2 回答
82350 浏览
提问于 2025-04-17 20:31

我刚开始学Python,遇到了一些处理自定义错误的问题。当我的代码发现错误时,我希望它能用红色字体显示错误信息,并让我回到Python终端,而不是直接退出Python。

我在寻找答案时发现了sys.exit(),但这个方法会完全退出Python。你知道有没有其他方法可以用红色字体显示错误信息并且让我回到终端吗?

这是我目前的代码。

import sys
def do_something(parameter):
    if parameter > 100:
        # quit the function and any function(s) that may have called it
        sys.exit('Your parameter should not be greater than 100!')
    else:
        # otherwise, carry on with the rest of the code

如果我说得不清楚,请告诉我,我很乐意提供更多细节。谢谢大家!

2 个回答

0

定义一个自定义的异常,并抛出它。

class MyError(Exception):
    pass

...

if parameter > 100:
    # quit the function and any function(s) that may have called it
    raise MyError('Your parameter should not be greater than 100!')

(不过现在想想,其实你也可以直接用内置的异常:ValueError 似乎就很合适)。

42

你有至少两种选择。

第一种是使用 return 语句:

def do_something(parameter):
    if parameter > 100:
        # display error message if necessary
        return  # 'exit' function and return to caller
    # rest of the code

你还可以通过 return somethingsomething 的值返回给调用者。这可以用来提供状态码,比如说 0 代表成功,1 代表出错。

另一种更好的方法是 raise 一个异常:

def do_something(parameter):
    if parameter > 100:
        raise ValueError('Parameter should...')
    # rest of the code

try:
    do_something(101)
except ValueError, e:
    # display error message if necessary e.g. print str(e)

关于异常的详细信息可以查看 Python手册

Python里有一些内置的异常类(比如上面提到的 ValueError)。你也可以自己定义异常,方法如下:

class ParameterError(Exception):
    pass

你还可以在自定义的异常类中添加额外的代码来处理参数、显示自定义的错误信息等等……

内置异常的列表可以在 这里 找到。

撰写回答