使用sys.exit vs raise SomeError在python中处理特殊情况

使用sys.exit vs raise SomeError在python中处理特殊情况,python,exception,error-handling,exception-handling,Python,Exception,Error Handling,Exception Handling,我正在编写一个有点小的python程序,我关心的是我在类方法和其他函数中处理异常的方式。 更准确地说,我正在尝试考虑使用sys.exit(又称raisesystemexit)与raisepropertederror的所有利弊。 例如,我有一个打印文本文件内容的函数: def print_lines(path_to_file): with open(path_to_file, 'r') as f: for line in f.readlines():

我正在编写一个有点小的python程序,我关心的是我在类方法和其他函数中处理异常的方式。 更准确地说,我正在尝试考虑使用
sys.exit
(又称
raisesystemexit
)与
raisepropertederror
的所有利弊。 例如,我有一个打印文本文件内容的函数:

def print_lines(path_to_file):
    with open(path_to_file, 'r') as f:
        for line in f.readlines():
            print(line)
检查提供给函数的文件是否确实存在是合理的,因此一种方法是:

import sys
import os


def print_lines(path_to_file):
    if os.path.isfile(path_to_file):
        with open(path_to_file, 'r') as f:
            for line in f.readlines():
                print(line)
    else:
        sys.exit('Error: file not found')
另一种方法是
引发FileNotFoundError
,然后在函数之外的某个地方拦截并适当处理。乍一看,使用
sys.exit
似乎可以省去编写额外代码行(即try-except-else块)的麻烦,因此似乎是一种可行的方法。所以我的问题是:
在这种情况下,您必须在何时进行sys.exit,何时引发适当的异常/错误更好?

如果您从sys模块读取docu,您将看到,sys.exit最终只会引发
SystemExit
异常。因此,我提出一个适当的异常是更好的方法。@JanZeiseweis好吧,是的,我知道这一点,但是如果我想在某些条件不满足时停止代码,该怎么办?例如,如果print_lines函数找不到文件,假设您已经知道这可能发生,那么我仍然会使用一个异常,并用一行告诉用户发生了什么以及如何继续。最后,如果文件不存在,脚本将以某种方式停止工作。异常的好处是,您可以处理它们,如果您提出一个异常,每个稍后阅读代码的人都会看到这是一个异常,并且很可能不希望发生。如果您说
sys.exit
,您可能会认为这对程序来说是正常的,并且是可能发生的事情,并且不是问题。