繁体   English   中英

我可以告诉 Python 忽略文件的其余部分和/或退出而不引发异常,就像到达文件末尾一样吗?

[英]Can I tell Python to ignore the rest of a file and/or exit without raising an exception as if the end of file was reached?

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

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

问题“如何退出......没有回溯......”在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.

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

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

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

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

在 sys 模块中,有退出函数。 它将顺利退出代码。

尝试使用sys.exit(0)

将此视为 xy 问题

你想做有文化的python编程

文学编程(LP)

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

以C为例:

  • 如果你选择 //​​ 来评论你需要把它放在 n 次 n 行
  • 如果你选择 /* 你必须小心避免在里面 */

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

Python文学编程

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

低压系统

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

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

从字面上看你的问题(!!)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM