擅长:python、mysql、java
<p>正如deceze已经提到的,日志和异常是两个完全不同的东西。一般来说:</p>
<ul>
<li><p>当遇到在代码的这一点上无法处理的意外/无效条件时,将引发异常。这个异常会发生什么(调用堆栈中是否有人会处理它)现在与您无关</p></li>
<li><p>只有当您能够处理异常或希望记录异常(最终包含额外的上下文信息)时,才能捕获异常,然后重新释放它</p></li>
<li><p>在应用程序的顶层,您最终会添加一个catchall异常处理程序,该处理程序可以记录异常并根据应用程序的类型(命令行脚本、GUI应用程序、web服务器等)决定处理这种情况的最佳方式。</p></li>
</ul>
<p>日志主要是用于事后检查、程序行为分析等的开发人员/管理工具,它既不是错误处理工具,也不是最终用户界面特性。你的例子:</p>
<pre><code>if len(symbol) != 1:
error_message = f'Created box with symbol={symbol}, width={width} and height={height}, Symbol needs to be a string of length 1'
logger.error(error_message)
print(f'\nError! symbol={symbol}, width={width} and height={height} -- Symbol needs to be a string of length 1')
return
</code></pre>
<p>是一个完美的反模式。如果函数需要一个字符串,而调用方传递了其他任何内容,那么唯一合理的解决方案是引发异常并让调用方处理它。它是怎样的,再一次,不关你的事。你知道吗</p>