python - 分别处理特定(针对io)的异常

标签 python error-handling exception-handling

某些IO操作会产生一些错误。重要的是,这不是一个异常(exception),而是要设置的。因此,我们为套接字错误设置了,为文件io设置了。如何处理不同IO操作之间没有交集的异常组?

例如,OSError处理文件io错误和某些(?)套接字错误。

我只有一个解决方案:使用try-except包装io操作并引发用户定义的异常。

def foo():
    try:
        # some file io
    except:
        raise MyFileIOException(reason=sys.exc_info())

    try:
        # some socket io
    except:
        raise MySocketIOException(reason=sys.exc_info())

def bar():
    try:
        foo()
    except MyFileIOException as exc:
        # handle
    except MySocketIOException as exc:
        # handle

有没有更好更好的解决方案?

最佳答案

我认为,您已经编写了不错的异常处理程序。而且,这取决于场景。比如说。如果要在库中创建函数,则建议不要在库函数中引入任何特定于应用程序/域的异常类型,而仅引发原始/本地异常类型。当应用程序代码将使用该函数时,它有责任声明自己的异常类型集并将库中生成的异常包装为自己的类型。

例如。图书馆代码

def WriteToFile(strFile, strCnt):
  objFile = open(strFile, "w")
  objFile.write(strCnt)
  objFile.close()

StudentRecord申请代码
import library   # import our library in which SaveStudent is present
import sys
def SaveStudent(objStudent):
   try:
      WriteToFile("studentRec.txt", str(objStudent))
   except IOError as e:
      raise StudentSaveFailedException, None, sys.exc_info()[2]

现在,在应用程序的异常处理程序组件中处理此异常,该组件将有意义地处理此异常并采取必要的纠正措施。

尽管我知道这是一个幼稚的解释,但这是大型应用程序中使用的策略,该策略使用多个内部和第三方库进行适当的异常处理。

希望对您有帮助。

关于python - 分别处理特定(针对io)的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33689252/

相关文章:

python - numpy 索引文档中的错误示例?

python-3.x - python Web服务器错误处理

java - Spring @ExceptionHandler 返回 HTTP 406

java - 如何避免在 Java 中有很多 try catch block

Python - 在这种情况下列表理解是有效的吗?

python - Qt.ScrollBarAsNeeded 在实际需要时不显示滚动条

php - HttpKernel\Exception\MethodNotAllowedHttpException : The GET method is not supported for this route. Supported methods: POST in Laravel

haskell - 如何在 Haskell 中编写错误类型?

java - 如何在 Spring 中处理 DataIntegrityViolationException?

python - cron 作业是否在谷歌应用引擎中同时运行?