print v / s在错误处理中返回混淆

时间:2017-07-12 09:47:53

标签: python-3.x function error-handling return

我的第一个功能是:

def conversion_one(x):
    try:
        if x >0:
            x = x*2
            print(x)
        else:
            print(-1*x)
    except TypeError: 
        conversion_one(int(x))
    except:
        print("there is an error")

    finally:
        print(type(x))

当我运行时,我得到以下输出

conversion_one('-3')
3
<class 'int'>
<class 'str'>

如果您看到代码序列,那么我的直觉是:

1)捕获错误并运行完整的代码和打印类型&#39; x&#39;(最终内部)

2)运行内部&#34;除了TypeError&#34;这意味着将字符串转换为int。

3)现在根据流程它满足其他条件所以为什么不执行print(-1 * x)而不是执行finally:print(type(x))first?

我的第二个功能是:(在此我使用条件语句中的return而不是使用print)

def conversion_two(x):
    try:
        if x >0:
            x = x*2
            return(x) #In conversion_one() I used print
        else:
            return(-1*x) #In conversion_one() I used print
    except TypeError:
        conversion_two(int(x))
    except:
        print("there is an error")

    finally:
        print(type(x))

我的第二个功能的输出是:

conversion_two('-3')
<class 'int'>
<class 'str'>

为什么conversion_two的输出没有给出任何转换?

我的第三个功能是:

def conversion_three(x):
    try:
        if x >0:
            x = x*2
            return(x)
        else:
            return(-1*x)
    except TypeError:
        print(conversion_three(int(x))) #used print which is missing in 
                                    #conversion_one() and conversion)_two()
    except:
        print("there is an error")

    finally:
        print(type(x))

我的第三个功能的输出是:

conversion_three('-3')
<class 'int'>
3
<class 'str'>

我的第四个功能是:

def conversion_four(x):
    try:
        if x >0:
            x = x*2
            return(x)
        else:
            return(-1*x)
    except TypeError:
        print(conversion_four(int(x)))
    except:
        print("there is an error")

    finally:
        print(type(x))

我的第四个功能的输出是: -

conversion_four('-3')
<class 'int'>
3
<class 'str'>

任何人都可以帮助我理解为什么我在所有四个函数中得到奇怪的输出以及为什么四个输出的顺序都不同?

0 个答案:

没有答案