Python 如何忽略错误而不停止脚本?
我有一个工作脚本(由Python 2.7支持): 但由于处理过程中出现负值,此脚本中会出现错误。 (即,当使用“s=”公式执行计算时,该值变为负值,脚本停止。) 以下是错误:Python 如何忽略错误而不停止脚本?,python,list,python-2.7,math,sys,Python,List,Python 2.7,Math,Sys,我有一个工作脚本(由Python 2.7支持): 但由于处理过程中出现负值,此脚本中会出现错误。 (即,当使用“s=”公式执行计算时,该值变为负值,脚本停止。) 以下是错误: Traceback (most recent call last): File "E: \ 005.py", line 148, in <module> s = ((- y2) -y1) * modinv (x2-x1, p) TypeError: unsupported operand type
Traceback (most recent call last):
File "E: \ 005.py", line 148, in <module>
s = ((- y2) -y1) * modinv (x2-x1, p)
TypeError: unsupported operand type (s) for *: 'long' and 'NoneType'
>>>
回溯(最近一次呼叫最后一次):
文件“E:\005.py”,第148行,在
s=(-y2)-y1)*modinv(x2-x1,p)
TypeError:不支持*:“long”和“NoneType”的操作数类型
>>>
我需要的脚本不是停止,而是只将正确的结果写入文件:“result.txt”。
而那些没有被正确忽略并继续发挥作用的东西!
可以忽略这一站吗
也就是说,如果发生错误,是否停止进程并执行其他顺序命令?
我的Python语言能力不强,无法修复脚本,使函数跳过此错误。如果您希望该函数返回错误值-
无-
,则应单独获取该值,并使用If/else
跳过它
value = modinv(x2-x1, p)
if value is not None:
s = (-y2-y1) * value
x3 = (s**2-x2-x1) % p
y3 = (s*(x2-x3)+y2) % p
result = "\nQ(%d\n,%d)" % (x3, y3)
f.write(result)
else:
print('TypeError for:', x2, x1, p)
#f.write("\nNo Result")
最终,您可以使用try/except
捕获此错误
try:
s = (-y2-y1) * modinv(x2-x1, p)
x3 = (s**2-x2-x1) % p
y3 = (s*(x2-x3)+y2) % p
result = "\nQ(%d\n,%d)" % (x3, y3)
f.write(result)
except TypeError:
print('TypeError for:', x2, x1, p)
#f.write("\nNo Result")
这就回答了您的问题:要忽略您的
错误,请尝试/except
,但您应该检查为什么从modinv
中获得None
,并更正它。或者使用if/else
检查modinv
中的值并跳过其他计算result=modinv(x2-x1,p)
如果结果不是None:s=…
@furas请告诉我代码本身需要修复什么?异常处理是Python非常基本的功能。你知道吗?您在尝试使用它时遇到了什么问题?使用此函数,现在结果不会写入文件:“result.txt”如果值
为无
,则无法计算x3
,y3
,因此无需写入任何内容。您始终可以将f.write('no result')
添加到其他:
或除此之外的中。顺便说一句:如果您想跳过负值,那么您应该选中g<0
,而不是g!=1
。当g>1
时,您可能会得到None
,并且它不是负值。需要更改什么我不明白?if/else如何跳过它?现在在回答中,您有了如何使用if/else
和try/except
的示例。这是基础知识——我不知道如何写得更简单。也许你的问题在不同的地方-也许你的计算不正确,它总是给出g!=1
因此它总是返回None
,并且它不能计算s
和以后的x3
,y3
,并且文件中没有要写入的内容。也许您的modinv
应该返回1
而不是None
,然后您可以计算s=(-y2-y1)*1
并在文件中写入x3
,y3
。
try:
s = (-y2-y1) * modinv(x2-x1, p)
x3 = (s**2-x2-x1) % p
y3 = (s*(x2-x3)+y2) % p
result = "\nQ(%d\n,%d)" % (x3, y3)
f.write(result)
except TypeError:
print('TypeError for:', x2, x1, p)
#f.write("\nNo Result")