Python 3.x 函数错误处理的有效方法

Python 3.x 函数错误处理的有效方法,python-3.x,exception,error-handling,Python 3.x,Exception,Error Handling,错误处理函数示例: def read_file(): try: with open(filename, 'rb') as fd: x = fd.read() except FileNotFoundError as e: return(e) return(x) 我会这样调用函数: file = read_file("test.txt") if file: #do something 有没有比多次使用retu

错误处理函数示例:

def read_file():
    try:
        with open(filename, 'rb') as fd:
            x = fd.read()
    except FileNotFoundError as e:
        return(e)
    return(x)
我会这样调用函数:

file = read_file("test.txt")
if file:
    #do something

有没有比多次使用return更有效的方法来处理错误?

捕捉
e
然后返回它是非常奇怪的;为什么函数的用户希望返回错误而不是引发错误?返回错误不会处理它,它只是将处理错误的责任传递给调用方。让错误被引发是让调用者负责处理它的一种更自然的方式。因此,完全不捕捉错误是有道理的:

def read_文件(文件名):
打开(文件名为“rb”)作为fd时:
返回fd.read()
对于希望写入
if file:
以测试文件是否存在的所需用例,您的
read_file
函数可以捕获错误并返回
None
,因此
if
条件将为false:

def read_文件(文件名):
尝试:
打开(文件名为“rb”)作为fd时:
返回fd.read()
除FileNotFoundError外:
一无所获
但是,这意味着,如果调用方没有意识到函数可能返回
None
,那么在预期文件数据的位置使用
None
,而不是
FileNotFoundError
,就会出现错误,并且很难识别代码中的问题


如果您确实希望使用可能不存在的文件名调用函数,那么将函数命名为
read\u file\u If\u exists
可能是一种更好的方式,可以清楚地表明使用不存在的文件名调用此函数不被视为错误。

如果返回错误,主代码中会发生什么情况?请再次检查
文件
是错误还是字符串,好吗?我会说
raisee
而不是
return
,然后还要处理函数调用。毕竟,如果出现错误,您不会希望继续。请提供一个示例作为答案,好吗?如果没有更多的代码上下文或目的,这有点困难,因为现在看起来我会放弃这个函数。
try/except
块将独立完成此任务