[AI 도움]
1. 문자열이 수식으로 된걸 파싱해야 될때,
import ast
# eval() 함수의 위험을 제거하고, 순수 수식에만 적용
# 주의) python 버전에 따라 몇몇이 좀 다름, 아래는 3.8 이상일때, 적용
def safe_eval(expr):
"""
안전하게 허용된 연산자만 사용해서 계산
"""
allowed_operators = {
ast.Add: lambda a,b: a+b,
ast.Sub: lambda a,b: a-b,
ast.Mult: lambda a,b: a*b,
ast.Div: lambda a,b: a/b,
ast.Pow: lambda a,b: a**b,
ast.USub: lambda a: -a,
}
def eval_node(node):
if isinstance(node, ast.Constant):
return node.value
elif isinstance(node, ast.BinOp):
op_func = allowed_operators.get(type(node.op))
if op_func is None:
raise ValueError("허용되지 않은 연산자")
return op_func(eval_node(node.left), eval_node(node.right))
elif isinstance(node, ast.UnaryOp):
op_func = allowed_operators.get(type(node.op))
if op_func is None:
raise ValueError("허용되지 않은 연산자")
return op_func(eval_node(node.operand))
else:
raise ValueError("허용되지 않은 표현식")
tree = ast.parse(expr, mode='eval')
return eval_node(tree.body)'Language > Python' 카테고리의 다른 글
| Python 참고할만한 동영상 (0) | 2020.06.14 |
|---|