Javascript 像在JS中一样处理Python异常
我是从Node.js来到python的,我已经习惯了这样的错误处理:Javascript 像在JS中一样处理Python异常,javascript,python,node.js,exception-handling,Javascript,Python,Node.js,Exception Handling,我是从Node.js来到python的,我已经习惯了这样的错误处理: doSmth(function(err, data) { if (err) { log(err); } else { fooSmth(data, function(err, res) { if (err) ... }) } }) 在Python中,处理以下错误是否可以接受 def do_smth(arg): try:
doSmth(function(err, data) {
if (err) {
log(err);
} else {
fooSmth(data, function(err, res) {
if (err) ...
})
}
})
在Python中,处理以下错误是否可以接受
def do_smth(arg):
try:
data = int(arg)
return None, data
except Exception as e:
logger(e)
return e, None
err, data = do_smth("1715")
if not err:
print data
因此,函数始终返回一个包含异常和数据值的元组:
(无,数据)或(异常,无)python方法是将
try
移动到do\smth
之外:
def do_smth(arg):
return int(arg)
try:
data = do_smth("1715")
except ValueError: # test for a specific error wherever possible
logger.exception()
else:
print data
或在失败的情况下返回无:
def do_smth(arg):
try:
return int(arg)
except ValueError:
logger.exception()
data = do_smth("1715")
if data is not None: # test singletons with is
print data
请注意,Python通常偏爱-风格的编码。尽管代码中没有错误,但通常不会将异常作为参数传递到其他作用域,除非异常实例实际用作数据。Python中的异常是轻量级的,它们会冒出气泡来呈现完整的回溯,所以您必须让它们存在并发生 如果您希望在调用
do_smth
时发生某种异常,只需编写代码来处理它,如下所示:
# Definition
def do_smth(arg):
return int(arg)
# Usage elsewhere
try:
data = do_smth(['invalid', 'number'])
except TypeError:
print('Incompatible type!')
except ValueError:
print('Not a number.')
else:
print('Conversion successful.')
专业提示:避免只捕获异常
。总是期待特定类型的错误,习惯于编写并引发自己的异常。这很有帮助。关于它
PS:我也来自JavaScript作为主要语言;我相信你也会喜欢蟒蛇的。:) Python能够很好地处理异常,没有理由仅仅因为您习惯了另一种语言的另一种方式(这在很大程度上是基于异步编程的),就避免使用它。如果您这样做,您将在任何地方复制异常处理代码,这将是大量的额外代码。此外,当您在程序最外层之外的任何地方处理异常时,您应该尽可能地使其具体化,只捕获您期望的错误,并知道如何处理这些错误。当
ValueError
可以时,不要捕获异常
。我喜欢EAFP提及的内容。:)@jonrsharpe在异常函数返回“None”的情况下,我没有想到这一点。感谢一个lotJavaScript->CoffeeScript->Python | | JavaScript->Python?在coffescript存在之前,我是rootz的JavaScript。不过我喜欢它,我在最近的项目中尝试过。我更[可能]是咖啡(现在是Python.)