TypeError: STR이 아닌 실수여야 합니다.

Olorunfemi Akinlua 2023년6월21일
TypeError: STR이 아닌 실수여야 합니다.

TypeError: must be real number, not str 오류는 잘못된 유형과 비실수를 사용하는 것과 관련이 있으며 이 경우 str 유형입니다.

데이터 유형으로 작업하는 것은 까다로울 수 있지만 이러한 TypeError를 방지하기 위해 올바른 데이터 유형을 함수에 구문 분석하도록 적용하거나 확인하는 것이 중요합니다.

이 기사에서는 TypeError: must be real number, not str 오류가 처음에 발생하는 방법과 유형 변환을 사용하여 이를 해결하는 방법에 대해 설명합니다.

float() 또는 int()를 사용하여 Python에서 TypeError: must be real number, not str 해결

함수, 특히 내장 함수로 작업할 때 필요한 인수는 종종 특정 유형입니다. 기본 데이터 유형, int, float, string 또는 Boolean이 될 수 있습니다.

따라서 작업하고 구문 분석하는 값이 올바른 데이터인지 확인하는 것이 중요합니다.

전형적인 예는 내장된 input() 함수로 작업하여 숫자를 가져와 간단한 수학적 표현으로 작업하는 것입니다.

number = input("Enter a Number: ")
print(number / 34 + 45 * number)

출력:

Enter a Number: 12
Traceback (most recent call last):
  File "C:\Users\akinl\Documents\Python\steps.py", line 2, in <module>
    print(number/34 + 45 * number)
TypeError: unsupported operand type(s) for /: 'str' and 'int'

여기에 숫자 바인딩이 문자열 데이터 12를 보유했기 때문에 TypeError 메시지가 있습니다. 정수나 실수 대신 12.

그러나 이 TypeError: unsupported operand type(s) for /: 'str' and 'int'TypeError: must be real number, not str 오류와 다릅니다. 차이점은 발생하는 작업에 있습니다.

Python의 math 라이브러리를 사용하여 사용자가 입력한 숫자를 내림합니다.

import math

number = input("Enter a Number: ")
print(math.floor(number))

출력:

Enter a Number: 12.45
Traceback (most recent call last):
  File "C:\Users\akinl\Documents\Python\steps.py", line 3, in <module>
    print(math.floor(number))
TypeError: must be real number, not str

이제 TypeErrorfloor() 메서드에 대한 문자열을 포함하는 number 바인딩을 구문 분석하고 이 메서드에는 float 또는 integer라는 숫자가 필요하기 때문에 다릅니다.

따라서 문제를 해결하려면 사용자가 전달하는 값의 데이터 유형을 필요한 항목에 따라 float 또는 integer 바인딩으로 변환해야 합니다.

내장 float() 함수는 부동 소수점 숫자를 처리할 때 가장 적합합니다. 반올림할 십진수가 필요하다면 float() 함수가 필요합니다.

import math

number = float(input("Enter a Number: "))
print(math.floor(number))

출력:

Enter a Number: 123.45
123

int() 함수는 필요한 숫자가 정수인 경우에 유용할 수 있습니다. 정수만 sin() 메서드로 구문 분석해야 하는 경우 int() 메서드를 사용할 수 있습니다.

import math

number = int(input("Enter a Number: "))
print(math.sin(number))

출력:

Enter a Number: 12
-0.5365729180004349

간단한 경우에는 해결하기가 더 쉬울 수 있지만 일부 복잡하거나 어려운 시나리오에서는 더 까다로울 수 있습니다. 예를 들어 무작위 삼각법 계산기로 작업하는 경우 변환해야 하는 위치를 확인하기 어려울 수 있습니다.

특히 연산 표현식 전에 즉시 변환하는 것이 항상 더 좋습니다. 이 경우 수학 연산입니다.

import random
import math


def create():
    global sideA
    sideA = format(random.uniform(1, 100), ".0f")
    global sideB
    sideB = format(random.uniform(1, 100), ".0f")
    global angleA
    angleA = format(random.uniform(1, 180), ",.3f")
    global angleB
    angleB = ANGLE_B()

    return angleB


def ANGLE_B():
    angle = format(math.asin(sideB * (math.sin(angleA) / sideA)), ".3f")
    return angle


print(create())

출력:

Traceback (most recent call last):
  File "c:\Users\akinl\Documents\Python\float.py", line 18, in <module>
    print(create())
  File "c:\Users\akinl\Documents\Python\float.py", line 11, in create
    angle_b = ANGLE_B()
  File "c:\Users\akinl\Documents\Python\float.py", line 15, in ANGLE_B
    ang = format(math.asin(side_b*(math.sin(angle_a)/side_a)), '.3f')
TypeError: must be real number, not str

오류를 추적하면 ANGLE_B() 함수를 호출하는 print(create())에서 sideA, sideBangleA 바인딩을 사용하는 것을 볼 수 있습니다.

이러한 바인딩은 floatint 데이터 값이 필요한 math 메서드로 구문 분석됩니다. 그러나 바인딩의 데이터 유형은 strings이며 float 또는 int로 변환해야 합니다.

이 경우 코드 문제를 해결하는 보다 책임 있는 방법은 값을 다시 변경할 필요가 없기 때문에 수학적 표현에 사용하기 전에 데이터 유형을 변환하는 것입니다.

import random
import math


def create():
    global sideA
    sideA = float(format(random.uniform(1, 100), ".0f"))
    global sideB
    sideB = float(format(random.uniform(1, 100), ".0f"))
    global angleA
    angleA = float(format(random.uniform(1, 180), ",.3f"))
    global angleB
    angleB = ANGLE_B()

    return angleB


def ANGLE_B():
    angle = math.asin(sideB * (math.sin(angleA) / sideA))
    return angle


print(create())

출력:

0.7293575839721542

따라서 데이터 유형을 다룰 때는 방어적이어야 하며, 날짜로 작업한 후에는 데이터를 필요한 데이터 유형으로 변환해야 합니다.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

관련 문장 - Python TypeError

관련 문장 - Python Error