相关疑难解决方法(0)

如何在Python中将字符串解析为float或int?

在Python中,我如何解析数字字符串,如"545.2222"相应的浮点值,545.2222?或者将字符串解析为"31"整数,31

我只是想知道如何将一个浮点数 解析str为a float,并且(单独)将一个int 解析str为一个int.

python floating-point parsing integer type-conversion

2108
推荐指数
21
解决办法
371万
查看次数

格式错误的字符串ValueError ast.literal_eval(),字符串表示为元组

我正在尝试从文件中读取元组的字符串表示,并将元组添加到列表中.这是相关的代码.

raw_data = userfile.read().split('\n')
for a in raw_data : 
    print a
    btc_history.append(ast.literal_eval(a))
Run Code Online (Sandbox Code Playgroud)

这是输出:

(Decimal('11.66985'), Decimal('0E-8'))
Traceback (most recent call last):


File "./goxnotify.py", line 74, in <module>
    main()
  File "./goxnotify.py", line 68, in main
    local.load_user_file(username,btc_history)
  File "/home/unix-dude/Code/GoxNotify/local_functions.py", line 53, in load_user_file
    btc_history.append(ast.literal_eval(a))
  File "/usr/lib/python2.7/ast.py", line 80, in literal_eval
    return _convert(node_or_string)

  `File "/usr/lib/python2.7/ast.py", line 58, in _convert
   return tuple(map(_convert, node.elts))
  File "/usr/lib/python2.7/ast.py", line 79, in _convert
   raise ValueError('malformed string')
   ValueError: malformed string
Run Code Online (Sandbox Code Playgroud)

python parsing representation python-2.x abstract-syntax-tree

38
推荐指数
3
解决办法
7万
查看次数

在Python中评估来自不安全用户输入的数学方程式

我有一个网站,用户输入数学方程式(表达式),然后根据网站提供的数据(常数)评估这些方程式.所需的数学运算,包括符号,算术运算min(),max()以及其他一些基本功能.一个示例等式可以是:

max(a * b + 100, a / b - 200)
Run Code Online (Sandbox Code Playgroud)

人们可以简单地eval()使用Python,但我们都知道这会导致网站泄露.进行数学方程式评估的安全方法是什么?

  • Python有什么数学方程式解析和评估引擎

  • 如果选择使用Python本身来评估表达式,那么任何Python沙箱都会限制Python,因此只有用户供应商操作符和函数可用.完全成熟的Python,如定义函数,应该完全禁用.子流程是可以的(参见PyPy沙箱).特别是,应该关闭用于利用内存和CPU使用的循环和其他漏洞.

  • 任何其他方法,例如使用命令行二进制(bc)?

python eval sandbox

25
推荐指数
2
解决办法
1798
查看次数

使用ast和白名单使python的eval()安全吗?

好.我知道 专家 ,你不应该永远使用Python的eval()不受信任的数据,直到永远.我并不比世界其他地方更聪明,甚至不应该尝试这个.但!无论如何,我要去.

我的基本问题是我正在编写一个小计算器评估程序,它将使用python语法的一个子集进行不可信的输入.我知道:使用plypyparsing并编写解析器然后我们去.通过传递全局和本地人来解决这个问题是eval()不行的.

我所看到的所有方法(并且一直保持冷漠)试图列举邪恶.在这里,我试图枚举 - 得到一个AST,只允许几个节点类型,然后验证任何调用是否属于一组白名单函数之一.这是一个迷你实现(和要点):

import ast
import math

SAFE_FX = {
    'exp': math.exp,
}

SAFE_NODES = set(
    (ast.Expression,
    ast.Num,
    ast.Call,
    ast.Name,
    ast.Load,
    ast.BinOp,
    ast.Add,
    ast.Sub,
    ast.Mult,
    ast.Div,)
)

class CleansingNodeVisitor(ast.NodeVisitor):
    def generic_visit(self, node):
        if type(node) not in SAFE_NODES:
            raise Exception("%s not in SAFE_NODES" % type(node))
        super(CleansingNodeVisitor, self).generic_visit(node)

    def visit_Call(self, call):
        if call.func.id not in SAFE_FX:
            raise Exception("Unknown function: %s" % …
Run Code Online (Sandbox Code Playgroud)

python security parsing eval

5
推荐指数
1
解决办法
2298
查看次数

Python:使用列表中的运算符的数学运算

假设我有一个包含数学运算符的列表,就像这样

operators = ['+','-','*','/']
Run Code Online (Sandbox Code Playgroud)

而且我从这里开始随机操作,就像这样

op = random.choice(operators)
Run Code Online (Sandbox Code Playgroud)

如果我取两个数字,比如4和2,我怎样才能让Python用数字进行数学运算(名为'op')?

python math list operators

3
推荐指数
1
解决办法
228
查看次数