首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么TypeError异常在这个定义中不起作用?

问为什么TypeError异常在这个定义中不起作用?
EN

Stack Overflow用户
提问于 2021-12-05 13:40:25
回答 2查看 71关注 0票数 0

我正在做一个函数来帮助我在一次考试中,它应该告诉我,当你以某种方式组合两种数据类型时,你会得到哪种数据类型。您还应该能够判断它是否会产生错误,因此我编写了以下代码:

代码语言:javascript
复制
a = '123'
b = 123

def check(data):
    try:
        print(type(data))
    except TypeError as error:
        print(f'Error: {error}')

check(a+b)

但是,我没有返回异常,而是收到一条错误消息,上面写着"TypeError:只能将str (而不是int)连接到str“。为什么试/除功能不起作用?

EN

回答 2

Stack Overflow用户

发布于 2021-12-05 13:56:23

如果要检查在安全组合两个对象时发生了什么,则需要在try块中执行组合:

代码语言:javascript
复制
def check(a, b):
    try:
        print(f'Trying to combine types {type(a)} and {type(b)}')
        c = a + b
        print(f'Resulting type: {type(c)}'))
    except TypeError as error:
        print(f'Error: {error}')
票数 1
EN

Stack Overflow用户

发布于 2021-12-05 13:57:20

因为a+b是在行check(a+b)中计算的,在行中没有异常处理。

下面是使用元编程实现您所要做的事情的一种方法,您可以将操作符函数作为参数传递给check函数。这里不方便的地方是您不能直接传递+运算符,所以您必须定义一个单独的函数。或者,您也可以使用operator库,如Python Mathematical signs in function parameter?中所述

代码语言:javascript
复制
a = '123'
b = 123

# ====================
def add(a, b):
    return (a+b)


# ====================
def check(data1, data2, combination_method):
    try:
        result = combination_method(data1, data2)
        print(type(result))
    except TypeError as error:
        print(f'Error: {error}')


check(a, b, add)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70234879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档