python - 处理函数中的多个异常
问题描述
我有一个使用http.servertranslate()
用 Python 3 编写的小型 Web 服务器,它在方法中调用函数,do_GET()
如下所示:
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
语句,通常是嵌套的。
注意:这是这个现已删除的问题的副本。该帖子的解决方案包含在下面,但欢迎提供其他答案。
解决方案
我不确定在您的逻辑中是否绝对需要嵌套块,但我会尝试使用自定义类try
的单个try
块。Exception
像这样的东西:
class MyException(Exception):
"""Generic error message."""
def __str__(self):
return self.__doc__
class SomeError(MyException):
"""SomeError message."""
pass
class SomeOtherError(MyException):
"""SomeOtherError message."""
pass
class SomeThirdError(MyException):
"""SomeThirdError message."""
pass
def translate(param):
try:
# do something
...
if cond1:
raise SomeError()
...
if cond2:
raise SomeOtherError()
...
if cond3:
raise SomeThirdError()
...
except MyException as err:
print(err)
return ""
推荐阅读
- javascript - 格式化模板字符串以删除空格但支持缩进
- java - Itext:将元素添加到新页面时添加新行
- ios - 有没有人有好主意来处理带有应该显示单个页面的 id 的深层链接?
- sql-server - 使用交叉应用功能
- python - 使用键在python中查询集排序
- java - 无法使用弹簧数据 jpa CrudRepository
- ios - do I need to embed navigation controller if I want to make custom navigation bar view?
- reactjs - 如何连接日期和时间
- c++ - C++14 中向量的 unordered_map 和擦除删除习语的奇怪行为
- c# - AutoMapper 映射无法正常工作 JObject/Json