Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 像在JS中一样处理Python异常_Javascript_Python_Node.js_Exception Handling - Fatal编程技术网

Javascript 像在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:

我是从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:
        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.)