Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何忽略错误而不停止脚本?_Python_List_Python 2.7_Math_Sys - Fatal编程技术网

Python 如何忽略错误而不停止脚本?

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

我有一个工作脚本(由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 (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")