Python评估错误抑制
首先,我知道eval的缺点,它将用于我只想做的一个实验 我正在创建一个脚本,它的工作原理与蛮力算法类似,但它不会破坏密码,而是找到一个特殊形式方程式的解决方案(不需要更多细节) 将有许多字符串填充(通常语法不正确)术语,如1+2)+3Python评估错误抑制,python,eval,Python,Eval,首先,我知道eval的缺点,它将用于我只想做的一个实验 我正在创建一个脚本,它的工作原理与蛮力算法类似,但它不会破坏密码,而是找到一个特殊形式方程式的解决方案(不需要更多细节) 将有许多字符串填充(通常语法不正确)术语,如1+2)+3 是通过eval获得这些术语结果的唯一方法吗 如何使python忽略eval中出现的语法错误?(程序不应终止) 要抑制: 抑制: Eval通常会引发SyntaxError,您可以使用 try: a = eval('1+2)+3') except SyntaxE
- 是通过
获得这些术语结果的唯一方法吗eval
- 如何使python忽略
中出现的语法错误?(程序不应终止)eval
Eval通常会引发SyntaxError,您可以使用
try:
a = eval('1+2)+3')
except SyntaxError:
pass
请记住,您可以将
eval
与访问作为第二个参数传递的任何函数隔离开来。eval通常会引发语法错误,您可以使用
try:
a = eval('1+2)+3')
except SyntaxError:
pass
请记住,您可以将
eval
与访问任何传递{''builtin':None}
作为第二个参数的函数隔离开来。使用ast中的literal\u eval,并捕获ValueError和SyntaxError
from ast import literal_eval
try:
a = literal_eval('1+2)+3')
except (ValueError, SyntaxError):
pass
改为使用ast中的文字值,并捕获ValueError和SyntaxError
from ast import literal_eval
try:
a = literal_eval('1+2)+3')
except (ValueError, SyntaxError):
pass
除了SyntaxError之外,还有更多的例外情况:
- ZeroDivision错误,例如对于
“1/0”
- 名称错误,例如用于
(未定义“franz/3”
)franz
- 类型错误,例如,
“[2,4]/2”
try:
eval (expr)
except (SyntaxError, NameError, TypeError, ZeroDivisionError):
pass
事实上,几乎所有现有的异常都可能被抛出,任何代码的评估都可能造成破坏,除非您将函数(例如,
os.system(“rm-rf/”)
,另请参见)。除了SyntaxError之外,还有更多的异常:
- ZeroDivision错误,例如对于
“1/0”
- 名称错误,例如用于
(未定义“franz/3”
)franz
- 类型错误,例如,
“[2,4]/2”
try:
eval (expr)
except (SyntaxError, NameError, TypeError, ZeroDivisionError):
pass
实际上,几乎所有现有的异常都可能被抛出,任何代码的评估都可能造成破坏,除非您将函数隔离(例如,
os.system(“rm-rf/”)
,另请参见).谢谢-看起来非常pythonic:DThanks-看起来非常pythonic:dy您无法保护eval不被访问函数:您无法保护eval不被访问函数:如果您使用映射,也可能会出现KeyError。如果您使用映射,也可能出现KeyError。