处理Python异常,如在J中

2024-10-02 10:26:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我是从节点.js我已经习惯了这样的错误处理:

doSmth(function(err, data) {
    if (err) {
        log(err);
    } else {
        fooSmth(data, function(err, res) {
            if (err) ...
        })
    }
})

在Python中是否可以处理以下错误

^{pr2}$

使函数始终返回一个包含异常和数据值的元组:

(无,数据)或(例外,无)


Tags: 数据logdataif节点错误jsfunction
2条回答

虽然代码中没有错误,但通常不会将异常作为参数传递到其他范围,除非异常实例实际用作数据。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.')

专业提示:避免只捕捉Exception。总是期待特定类型的错误,也要习惯于编写和引发自己的异常。这很有帮助。Read more关于它。;)

PS:我也是JavaScript的主要语言;我相信您也会喜欢Python的。:)

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

或者在失败的情况下返回return None

^{pr2}$

请注意,Python通常偏爱"easier to ask for forgiveness than permission"样式的编码。在

相关问题 更多 >

    热门问题