Почему Python предполагает, что переменная с неопределенным типом является массивом - PullRequest
0 голосов
/ 10 июля 2019

Я определяю функцию по интервалам.И когда python сравнивает параметр fck со значением разграничения между 2 интервалами (fck<50), он возвращает ошибку.Я понимаю, что он не может сравнивать массив с целым числом, но fck не является массивом!Это параметр, который я намерен использовать как поплавок.Как python определяет, какой тип имеет параметр, и как я могу его определить?

В других аналогичных функциях, которые я определил, все в порядке.Я включаю проблемную функцию и пример работающей.Я не вижу различий между ними.В чем проблема?Я не только хочу заставить его работать, но я также хочу понять, что делает python.

Я попытался указать тип параметра, выполнив def par_rec(eps,fck:float):, и это не меняет результат.

Определение, которое возвращает ошибку во второй строке:

def par_rec(eps,fck):
    if fck<50:
        eps0=0.002
    else:
        eps0=0.002+0.000085*(fck-50)**0.5
    if fck<50:
        epsu=0.0035
    else:
        epsu=0.0026+0.0144*((100-fck)/100)**4
    if fck<50:
        n=2
    else:
        n=1.4+9.6*((100-fck)/100)**4
    if eps<0:
        sig=0
    elif eps<eps0:
        sig=fck/1.5*(1-(1-eps/eps0)**n)
    else:
        sig=fck/1.5
    return sig

И аналогичное определение, которое не вызывает никаких проблем:

def fctm(fck):
    if fck<50:
        fctm = 0.3 * fck ** (2 / 3)
    else:
        fctm=0.58*fck**0.5
    return fctm

I'mопределяя функцию, я не вызываю ее, когда получаю ошибку:

line 81, in par_rec
    if fck<50:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

но fck не является массивом!

fck, вероятно, является массивом, потому что вы не предоставите никаких доказательств того, что это не массив, и вы не покажете нам, какВы вызываете свою функцию.Пожалуйста, покажите нам print(type(fck)).

Этот тип нигде не определен

Это невозможно в Python.Каждый объект (и переменная также является объектом) имеет тип.Если вы не назначите никакого значения, переменная будет неопределенной.Если вы назначите значение, то Python автоматически назначит соответствующий тип.Если вы хотите инициализировать допустимую, но «пустую» переменную, присвойте None.

0 голосов
/ 10 июля 2019

Хотя вы можете думать, что ваша переменная не является массивом, это не так. Чтобы отладить это, вы должны напечатать тип вашей подозрительной переменной.

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