0

当我执行 Python 脚本 (*) 并到达文件末尾时,我会返回命令提示符,而不会显示任何其他消息。我想知道是否可以在源文件中的某处插入一条语句,以便在该点“退出文件”(结束解释和编译),忽略从那里到文件末尾的内容(或者,我可以像在 C 中使用#if 0预处理器指令和相应的#endif) 那样忽略一个大区域,所以当我处理文件的早期部分时,我可以在该点下方留下注释和代码片段等。

当我使用quit(),exit()raise SystemExit(...)时,所有这些都会引发异常,导致“Traceback”消息。在 (La)TeX 中是否有类似的东西\endinput告诉解释器简单地忽略文件的其余部分,就好像已经到达文件结尾,或者cpp指令#if 0 ... #endif

“如何退出......没有 Traceback......”这个问题在 SO 上被多次询问和回答,但答案总是“你不能”;“它必须是允许清理/调试的那种方式......”(有人提到os._exit()然后其他人说“不,因为清理不完整”)。也许这指的是从“在某物内”退出,但也许我就是这种情况,因为我的文件被其他一些 python 函数读取。所以我宁愿寻找一个命令,上面写着“这是这个文件的结尾!” 或“忽略输入文件的后续行直到最后(或直到相应的#endignore指令存在。)

PS:我知道我可以将文件的其余部分放在 中"""...""",但这仅适用于我在“暂存区域”中已经有多行注释的地方。是的,我可以 [并且确实] 使用 """ 表示多行命令,并使用 ''' 来“注释掉”文件的其余部分。但我认为这是一种解决方法,而不是回答我的问题是否这样的命令或指令存在。

(*) 进一步解释我对这种解决方案的需求:我在 pythonanywhere.com 上遇到了这个问题,我必须出于专业(教育)的原因使用它。单击“运行”_pa_run("filename")会在他们的服务器上执行一个命令(可能是他们制作的自定义命令),也许这就是为什么exit()sys.exit()产生那个 Traceback。

编辑:根据要求,我将添加一个具体示例(虽然不切实际,但为简洁起见):

def Newton(f,x0,eps,N):
    """here I implement Newton's method"""
    #(...) iterations go here (...)
    return x
def f(x): #function for testing
   return ...

quit() # Unfortunately this raises a Traceback, at least when the file is "Run" 
# on pythonanywhere.com. I'd like to avoid this. I would simply like everything
# to be ignored after this point, let's say "for convenience", to simplify.
# I'd like to know whether this is possible, in the given configuration.

def f(x):# this is another function for testing
   return [something else]
[...] # another formula to try. This is just a snippet and might not compile.
def Newton(...):# the old version. Not yet trashed because maybe needed.
      # Would have to rename this if the whole file is read by the compiler.

# Below follow more routines which are part of the final version of this file, 
# but I don't want to compile all of them each time, while I fiddle around with
# the latest addition, for now put the beginning of the file.
# OTOH I would like to have that code in the same file for easier copy-paste in
# case I need some parts of it while developing the new stuff at top of file.
4

3 回答 3

4

Python 虽然不像 LaTeX。可以以没有函数的样式编写 Python 脚本,if __name__ == "__main__":因此它的执行流程是从上到下的,但这并不意味着它类似于 LaTeX。

我想知道在文件结束之前是否有“退出”(结束解析/执行)脚本的命令

我认为您关于如何解释和执行 Python 脚本的心理模型与实际发生的情况不一致。首先,解析脚本与执行脚本不同,因此您需要分别考虑它们。

似乎 LaTeX 语法与编程语言相似,让您在搜索与\endinput不存在类似的概念时感到困惑。我认为没有办法在任何时候停止脚本的“解析”,如果你希望脚本的一部分不“执行”,你要么需要调用类似的东西,exit要么return在你到达那部分之前或将其包装在注释块中。

于 2020-01-16T05:23:00.463 回答
0

在 sys 模块中,存在退出功能。它将顺利退出代码。

尝试使用sys.exit(0)

于 2020-01-16T05:12:17.920 回答
0

将此视为 xy 问题

你想做有文化的python编程

文学编程(LP)

我对 LP 的简单(主义)定义是 LP 颠倒了代码和注释的“默认性”。

以 C 为例:

  • 如果您选择 //​​ 进行评论,您需要将它 n 次 n 行
  • 如果你选择 /* 你必须小心避免进入 */

为什么不说除了以某个字符开头的行之外的所有内容都是注释?这是 LP 选项。例如LiterateHaskell使用 >

Python识字编程

我并不真正推荐这些选项,因为有文字的编程模型需要更好地得到语言本身的支持。见识字haskell

LP系统

更好的选择是使用 LP 系统。例如

  • 木星
  • Emacs -> 组织模式 -> babel

“从字面上”回答你的问题(!!)

问题在于解析——因为 python 在任何执行之前解析整个程序文件,如果你在解释器中抛出随机文本,你几乎肯定会得到 SyntaxErrors。Python 提供了足够的钩子来定制解释器。

于 2020-01-16T08:16:47.410 回答