Преобразование типа одной переменной в другую, оба типа неизвестны. Не ищу переключатель или список if / elif / else - PullRequest
0 голосов
/ 09 июля 2020

что-то вроде: * Исправление:

def myfunc(x, y):
    if type(x) == type(y):
        print(x + y)
    else:
        x = type(y)(x) # mistake was x = type(y).__name__(x)
        print(x + y)
# Error (Not anymore, works like a charm): 
# y = typename(y)
# TypeError: 'str' object is not callable

x было int, y было строкой, но предположим, что мы не знаем.

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Это не сработает, потому что type(x).__name__ вернет имя типа как строку.

Итак, если значение x равно 'some_string', вызов type(x) вернет

Но type(x).__name__ вернет

'str'

Класс вызывается, а буквальная строка - нет.

Вы захотите заменить

typename = type(x).__name__
y = typename(y) # or even if only typename(y)

чем-то вроде.

my_type = type(x)
y = my_type(y) # or even if only typename(y) 

Обратите внимание:

  • y должно быть преобразовано в класс типа x. Таким образом, если x - это int, а y - строка вроде 'ab c', этот метод выдаст тип ValueError
  • x должен поддерживать метод __add__, в противном случае эта функция будет бросить TypeError.
0 голосов
/ 09 июля 2020

Показывает ошибку, потому что вы пытаетесь передать значение чистой строке. Значение, хранящееся в 'typename', - 'str', это просто строка. Литеральные строки не могут принимать аргументы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...