相关疑难解决方法(0)

在Python中将分号分隔的字符串拆分为字典

我有一个看起来像这样的字符串:

"Name1=Value1;Name2=Value2;Name3=Value3"
Run Code Online (Sandbox Code Playgroud)

Python中是否有一个内置的类/函数来接受该字符串并构造一个字典,就像我这样做了:

dict = {
    "Name1": "Value1",
    "Name2": "Value2",
    "Name3": "Value3"
}
Run Code Online (Sandbox Code Playgroud)

我查看了可用的模块,但似乎找不到匹配的东西.


谢谢,我确实知道如何自己制作相关的代码,但是因为这些小的解决方案通常是我的领域等待发生(即有人写道:Name1 ='Value1 = 2';)等等,所以我通常更喜欢一些预先测试功能.

我会自己做的.

python string dictionary split

79
推荐指数
3
解决办法
8万
查看次数

用Python解析方程式

我如何(轻松地)获取一个字符串,例如"sin(x)*x^2"用户可能在运行时输入的字符串,并生成一个可以评估任何值的Python函数x

python parsing equation

38
推荐指数
4
解决办法
5万
查看次数

Python eval:如果我禁用内置和属性访问,它仍然很危险吗?

我们都知道这eval很危险,即使你隐藏了危险的函数,因为你可以使用Python的内省功能深入挖掘并重新提取它们.例如,即使您删除__builtins__,也可以使用它来检索它们

[c for c in ().__class__.__base__.__subclasses__()  
 if c.__name__ == 'catch_warnings'][0]()._module.__builtins__
Run Code Online (Sandbox Code Playgroud)

但是,我见过的每个例子都使用属性访问.如果我禁用所有内置函数禁用属性访问(通过使用Python令牌化程序对输入进行标记,并在具有属性访问令牌时拒绝它),该怎么办?

在你问之前,不,对于我的用例,我不需要其中任何一个,所以它不会太瘫痪.

我想要做的是让SymPy的同情功能更安全.目前,它对输入进行了标记,对其进行了一些转换,并在命名空间中对其进行了演绎.但它不安全,因为它允许属性访问(即使它真的不需要它).

python eval python-internals

35
推荐指数
5
解决办法
4898
查看次数

来自字符串的数学运算

假设我有一个标准的Python字符串(例如从中获取的字符串raw_input()),可能"2 + 2"是为了简单起见.

我想将这个字符串转换为Python中的标准数学运算,这样"2 + 2"就会返回4.

有没有一种简单的方法可以做到这一点,或者我是否必须拆分空格并手动解析每个数字/符号,然后根据我发现的数据进行数学运算?

我想要正则表达式吗?

python string math

32
推荐指数
5
解决办法
9万
查看次数

在raw_input上使用Python的输入是否有用?

我目前教大学一年级学生python,我很惊讶地发现,input我的一些学生已经决定使用(并且被奇怪的行为搞糊涂了)看似无害的功能,正在隐藏eval它背后的电话.

所以我的问题是,input函数调用的原因是eval什么,以及这对哪些函数更有用raw_input呢?我知道Python 3已经改变了,但它首先似乎是一个不寻常的设计决定.

Python 2.x输入函数文档

python user-input python-2.x

31
推荐指数
2
解决办法
4675
查看次数

在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
查看次数

在Python中解析用户提供的数学公式的安全方法

是否有Python的数学表达式解析器+评估器?

我不是第一个提出这个问题的人,但答案通常指向eval().例如,人们可以这样做:

>>> safe_list = ['math','acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'abs']
>>> safe_dict = dict([ (k, locals().get(k, None)) for k in safe_list ])
>>> s = "2+3"
>>> eval(s, {"__builtins__":None}, safe_dict)
5
Run Code Online (Sandbox Code Playgroud)

但这不安全:

>>> s_badbaduser = """
... (lambda fc=(
...     lambda n: [
...         c for c in 
...             ().__class__.__bases__[0].__subclasses__() 
...             if c.__name__ …
Run Code Online (Sandbox Code Playgroud)

python

24
推荐指数
2
解决办法
4128
查看次数

快速评估大量输入值的数学表达式(函数)

以下问题

并且他们各自的答案让我想到我如何能够有效地解析一个(或多或少可信的)用户给出的单个数学表达式(一般来说,就这个答案而言)/sf/answers/41600611/来自数据库的20k到30k输入值.我实施了快速而肮脏的基准测试,因此我可以比较不同的解

# Runs with Python 3(.4)
import pprint
import time

# This is what I have
userinput_function = '5*(1-(x*0.1))' # String - numbers should be handled as floats
demo_len = 20000 # Parameter for benchmark (20k to 30k in real life)
print_results = False

# Some database, represented by an array of dicts (simplified for this example)

database_xy = []
for a in range(1, demo_len, 1):
    database_xy.append({
        'x':float(a),
        'y_eval':0,
        'y_sympya':0,
        'y_sympyb':0,
        'y_sympyc':0,
        'y_aevala':0, …
Run Code Online (Sandbox Code Playgroud)

python eval abstract-syntax-tree sympy numexpr

9
推荐指数
1
解决办法
2902
查看次数

Python - 在字符串中评估数学表达式

我有一个关于在字符串中评估数学表达式的问题.例如我的字符串如下:

my_str='I have 6 * (2 + 3) apples'
Run Code Online (Sandbox Code Playgroud)

我想知道如何评估此字符串并获得以下结果:

'I have 30 apples'
Run Code Online (Sandbox Code Playgroud)

这有什么办法吗?

提前致谢.

eval在这种情况下,PS python的功能无济于事.当尝试使用该eval函数进行评估时,它引发了错误.

python string math expression eval

8
推荐指数
1
解决办法
1万
查看次数

SymPy的安慰是多么安全(<string>).evalf()?

我们知道Python eval()是邪恶的

http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html

StackOverflow中的线程和线程建议使用SymPy evalf().

作为一个Python新手,我无法真正说服自己,evalf()因为我缺乏技能是安全的.任何人都可以详细说明evalf()(不同)的内容吗?

python eval string-parsing

7
推荐指数
1
解决办法
809
查看次数