【发布时间】:2019-04-14 11:42:57
【问题描述】:
我有一个使用http.server 用Python 3 编写的小型网络服务器,它在方法do_GET() 中调用函数translate(),如下所示:
class httpd(BaseHTTPRequestHandler):
def do_GET(self):
self.wfile.write(bytes(f'{translate(var[0])}', 'utf-8'))
现在在这个translate() 函数中,我有几个条件语句和try 和except 块大致如下:
def translate(param):
try:
# do something
except SomeError as some_err:
print("Error: " % some_err)
return ""
if True:
try:
# do something
except SomeOtherError as some_other_err:
print("Error: " % some_other_err)
return ""
except SomeThirdError as some_third_err:
print("Third error: " % some_third_err)
return ""
else:
# additional try and except blocks which print an error and
# return an empty string
上面的代码被简化了,但原则上如果发生异常,我会返回一个空字符串,因此如果发生异常,我的 Web 服务器不会向客户端返回任何内容。
有没有更易于管理的方法来处理这个问题?具体来说,我希望:
- 避免通过单独的
except部分捕获每个错误,同时仍支持取决于错误类型的错误消息。 - 避免在我的函数中编写多个
try/except语句,这些语句通常是嵌套的。
注意:这是this now deleted question 的副本。该帖子中的解决方案包含在下面,但欢迎提供其他答案。
【问题讨论】:
-
这是一个非常广泛的问题。异常处理非常特定于所涉及的用例,如果重组,您的实际应用程序很可能完全避免一堆异常。但是对于过于通用的
Something..Error异常和do something代码,我们只能给出非常广泛的建议。上下文管理器可以提供帮助,但不是通用的万能解决方案。捕获基本异常是另一回事。使用except (Exc1, Exc2, Exc3)然后在异常处理程序中从那里分派是第三个。这些都有不同的特点。 -
但是写下所有这些需要接近可出版书籍状态的东西,所以我已经关闭了它,因为太宽泛了。
标签: python python-3.x exception error-handling exception-handling