【发布时间】:2020-12-14 05:03:35
【问题描述】:
我想要一个通用函数 get_me() 能够同时处理序列和单个元素参数。
代码如下:
from typing import Sequence
class class_1:
def __init__(self, i: int=0):
self.name = 'A'+str(i)
def __repr__(self):
return self.name
class class_2:
def __init__(self, i: int=0):
self.name = 'B'+str(i)
def __repr__(self):
return self.name
def get_me(seq: Sequence):
for s in seq:
print(f"\n1 is {s[0].name}, 2 is {s[1].name}")
这适用于以下所有组合:
one = class_1(1), class_2(1)
two = class_1(2), class_2(2)
three = class_1(3), class_2(3)
many = [one, two, three]
many = (one, two, three)
many = {one, two}
many = one, two
get_me(many)
...但给了TypeError
get_me(一个)
如果没有try: except,是否可以让这段代码处理它?
【问题讨论】:
-
这能回答你的问题吗? Check for [] operator
-
@fountainhead:
def get_me(seq: Union[Sequence, Tuple]): if hasattr(seq, '__getitem__'): for s in seq: print(f"\n1 is {s[0].name}, 2 is {s[1].name}") else: print(f"\n1 is {s[0].name}, 2 is {s[1].name}")get_me(one) 仍然报错 -
在您的
else子句中,您根本不应该使用[]运算符。 -
@fountainhead: ... 但是
one[0].name, one[1].name可以工作....那么,可以用什么代替? -
您编写它的方式,在
else子句中,s未定义(在if子句中,s由for循环定义)。这可能就是您在else子句中收到错误的原因。因此,在else子句中,您应该打印seq[0].name和seq[1].name
标签: python