【问题标题】:Properly terminate script without error message in Spyder在 Spyder 中正确终止脚本而不会出现错误消息
【发布时间】:2017-07-13 07:14:22
【问题描述】:

对于我在 python 中的项目,我将两个输入说 a 和 b 作为整数值。现在代码如下:

import sys
a = input("enter a")
b = input("enter b")
if a < b:
    print(" enter a greater than b and try again")
    sys.exit()

# Rest of the code is here

现在这工作正常。但是会创建一个额外的语句

An exception has occurred, use %tb to see the full traceback.

SystemExit

我不希望这样,因为用户可能认为代码的功能不正确。那么有没有什么办法不显示这个语句或任何其他函数会退出代码而不打印除了我写的行之外的任何东西?

注意 我尝试了 exit() 但它继续执行它下面的代码。另外,我注意到 this related question 但那里列出的方法在这种情况下不起作用。

编辑:我正在添加更多信息。我需要把这个退出函数放到一个自定义函数里面,这样每次用户输入一些错误的数据,代码就会调用这个自定义函数,退出代码。 如果我尝试将我的代码放在 if else 语句中,例如

def end():
    print("incorrect input try again")
    os.exit()

a = input("enter data")
if a < 10:
    end()
b = input ("enter data")
if b < 20:
   end()
# more code here

我不知道为什么,但我什至不能在最后定义这个用户定义的函数,因为它会引发未定义函数 end() 的错误。我在 Windows 上使用带有 Spyder 的 Python。

【问题讨论】:

  • 对不起,我以为我已经解决了这个问题,但不幸的是我没有。所以请帮忙!!
  • @moooeeeep 目前我正在使用 Spyder 在 Windows 上进行编码,但我的代码中没有任何此类内容。
  • 那么这似乎是相关的:stackoverflow.com/q/25928377/1025391(虽然可能有点过时,因为明显的行为略有不同)你最好直接在你的问题中陈述这些信息。
  • (希望你使用的是 Python 3?)

标签: python exit spyder


【解决方案1】:

您可以使用os._exit()

a = int(input("enter a"))
b = int(input("enter b"))
if a < b:
    print(" enter a greater than b and try again")
    os._exit(0)

【讨论】:

  • os中没有exit()属性。
  • 感谢它运行良好,甚至没有任何警告! :)
【解决方案2】:

这似乎工作得很好:

import sys

def end():
    print("incorrect input try again")
    sys.exit(1)

a = input("enter data")
if int(a) < 10:
    end()
b = input ("enter data")
if int(b) < 20:
    end()

我使用了sys.exit 并修复了您的条件以避免将字符串与整数进行比较。我在输出中看不到任何其他消息。只有这个:

>py -3 test2.py
enter data1
incorrect input try again
>

还请注意 python 文档中的此 qoute:

标准的退出方式是 sys.exit(n)。 [os]_exit() 通常应该只 在 fork() 之后在子进程中使用。

它也适用于repl

【讨论】:

  • 如果代码第一次运行,它会显示C:\Users\abc\Anaconda\lib\site-packages\IPython\core\interactiveshell.py:2889: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1) An exception has occurred, use %tb to see the full traceback. SystemExit,如果在同一个控制台上再次执行代码,它不会显示警告,但会显示:An exception has occurred, use %tb to see the full traceback. SystemExit。我不想显示这些消息。
  • 代码正常退出,但给出了我不需要打印的额外语句。
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 2016-03-09
相关资源
最近更新 更多