Rumah >pembangunan bahagian belakang >Tutorial Python >Python 对异常与错误的处理策略,用 try...except,还是 if...else...,哪种比较好?
Beginning Python From Novice to Professional, 2nd Edition, CHAPTER 8, EXCEPTIONS, Page 173:
正文中这样描写:
The point is that using try/except statements is in many cases much more natural (more “Pythonic”) than if/else, and you should get into the habit of using them where you can.1
注释:
1. The preference for try/except in Python is often explained through Rear Admiral Grace Hopper’s words of wisdom, “It’s easier to ask forgiveness than permission.” This strategy of simply trying to do something and dealing with any errors, rather than doing a lot of checking up front, is called the Leap Before You Look idiom.
————————————————————————————————
Python 基础教程(第2版),第8章,异常,第136页:
在很多情况下,使用try/except语句比使用if/else会更自然一些(更“Python化”),应该养成尽可能使用if/else语句的习惯。 ①
①try/except语句在 Python 中的表现可以用海军少将Grace Hopper的妙语解释:“请求宽恕易于请求许可。”在做一件事时去处理可能出现的错误,而不是在开始做事前就进行大量的检查,这个策略可以总结为习语“看前就跳(Leap Before You Look)”。
—————————————————————————————————
我对前面英文的理解是要让读者多用 try/except,而中文的翻译是说多用 if/else,是我理解错了,还是翻译的有错误?
Scala提供了Option机制来解决,代码中不断检查null的问题。再见 NullException
这个例子包装了getProperty方法,使其返回一个Option。 这样就可以不再漫无目的地null检查。只要Option类型的值即可。
使用pattern match来检查是常见做法。也可以使用getOrElse来提供当为None时的默认值。
给力的是Option还可以看作是最大长度为1的List,List的强大功能都可以使用。
参考地址:Scala Tourdef getProperty(name: String): Option[String] = {
val value = System.getProperty(name)
if (value != null) Some(value) else None
}val osName = getProperty("os.name")osName match {
case Some(value) => println(value)
case _ => println("none")
}println(osName.getOrElse("none"))osName.foreach(print _)输出结果:
linux
linux
linux