当我尝试运行 Python 脚本时,为什么会出现“预期有缩进块”? [关闭]

2023-12-21

我有一个错误,显示“预期有一个缩进块” 您能否指导我如何处理此错误。谢谢你:)

代码示例:

for ch in f: ( translatedToken = english_hindi_dict[ch] ) if (ch in english_hindi_dict) else (translatedToken = ch) 

编辑答案以匹配代码示例。

for ch in f: ( translatedToken = english_hindi_dict[ch] ) if (ch in english_hindi_dict) else (translatedToken = ch)  

只是无效的 Python。

首先,可读性。您的代码很难阅读,因此也很难调试。 “ch”和“f”是什么?更重要的是,你可以在Python中做一个衬垫,但不推荐这样做,所以把for在单独的一行中。然后缩进。

for chunk in file: 
    ( translatedToken = english_hindi_dict[chunk] ) if (chunk in english_hindi_dict) else (translatedToken = chunk)

现在我们可以看到出了什么问题。您可以在条件语句中进行变量赋值。这在 Python 中是不允许的。我猜您有 C/C++ 背景并且习惯这样做。在 Python 中你不能这样做,以防止你编写混淆的代码。所以你最终会得到:

for chunk in file: 
    translatedToken = english_hindi_dict[chunk] if chunk in english_hindi_dict else chunk

如果您使用 Python 2.5+,这段代码应该可以工作。但三元运算符在较旧的 Python 版本中尚不可用。让我们让它更友好一点:

for chunk in file: 
    translatedToken = chunk
    if chunk in english_hindi_dict:
        translatedToken = english_hindi_dict[chunk]

你可能会说写起来更长,你是对的。但是您花在阅读代码上的时间比编写代码的时间多,因此让代码易于阅读是有意义的。当然,一旦你掌握了Python,你就会尝试让它以更Pythonic的方式工作。听说过 EAFTP 吗?

for chunk in file: 
    try:
        translatedToken = english_hindi_dict[chunk]
    except KeyError:
        translatedToken = chunk

但 Python 充满了惊喜,您会发现大多数经典用例都已得到解决。标准库通常提供优雅、简短但可读的解决方案:

for chunk in file: 
    translatedToken = english_hindi_dict.get(chunk, chunk)

作为结论:不要尝试像编写 C 那样编写 Python,也不要像编写 Perl 那样编写 Java。其他工具,其他风格。


要解决此问题,请启动编辑器的“搜索和替换”功能,并进行巨大的“全部替换”,将所有选项卡更改为 4 个空格,反之亦然。然后缩进所有块,最后对齐同一块中的所有指令。

有趣的是,之前没有出现在SO上。毕竟,这是事实,但并不那么明显。

在 Python 中,使用空格或制表符分隔块,而不是“{”。

因此,每当你进入一个块(函数、循环、类等)时,你都必须缩进你的代码。这不仅是好的做法,而且是强制性的。如果你不这样做,你的程序就会崩溃。

现在,大多数时候,您会收到此错误,因为您确实缩进了,但使用了制表符和空格。在 Python 程序中,您应该使用制表符或空格,但切勿在同一文件中同时使用两者。

E.G:

if (age > 18)
{
    printf("You can vote")
}

Becomes:

if age > 18:
    print("You can vote")

在大多数语言中,您可以执行以下操作:

if (age > 18)
{
printf("You can vote")
}

在 Python 中你不能:

if age > 18:
print("You can vote")

引发异常。更重要的是,你必须对齐同一块的所有指令,所以:

if age > 18:
    print("You can vote")
    print("How cool is that ?")

很好,但是:

if age > 18:
    print("You can vote")
   print("How cool is that ?")

引发异常。

最终,您不能在同一块中混合使用制表符和空格。所以:

if age > 18:
    print("You can vote")
    print("How cool is that ?")

看起来不错,但会引发异常。为了避免这个问题,只需坚持使用制表符或空格即可。这PEP8 http://www.python.org/dev/peps/pep-0008/,最常用作编码风格参考的文本,建议使用 4 个空格。

大多数编辑器都有全局“搜索和替换”功能,可以让您解决可能遇到的任何问题。有些像 Geany 或Ulipad https://stackoverflow.com/questions/1792360/what-are-the-limits-of-python/1793767#1793767甚至有“用空格替换所有制表符”功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我尝试运行 Python 脚本时,为什么会出现“预期有缩进块”? [关闭] 的相关文章

随机推荐

  • 为什么使用参数化查询或实体框架可以防止 SQL 注入?

    我已经很好地掌握了 SQL 注入 当 SQL 查询应该是这样的时候 SELECT FirstName LastName FROM Customers WHERE CustomerId valueFromApplication 变成这样的查询
  • Spring Bean 的公共访问修饰符和模块导出

    Spring bean 类 Spring 应用程序上下文设置的对象的类 必须是public课程 让 Spring 创建这些对象 显然 如果yourbeans 访问不同包中的其他 beans 你的 beans 必须是public彼此互动 我的
  • O_NONBLOCK 是否被设置为文件描述符或底层文件的属性?

    根据我在 The Open Group 网站上读到的内容fcntl http www opengroup org onlinepubs 009695399 functions fcntl html open http www opengro
  • Phonegap iPad 应用程序启动画面/启动屏幕在 deviceReady 上切换

    我有一个使用 HTML JS CSS Phonegap 创建的 iPad 应用程序 仅限横向 一切都按预期进行 但是我遇到了启动画面 启动屏幕的问题 当应用程序加载时 会显示正确的启动画面 正确的大小和命名等 但是一旦应用程序达到 devi
  • Google Billing API:订阅购买后不久,会触发订阅过期,然后立即续订订阅

    我正在使用 Firebase Cloud Functions 来处理应用内购买的后端流程 如果我购买订阅 在 Flutter Android 客户端上 购买流程将毫无问题 但是 当第一次续订发生时 我首先收到订阅已过期的实时开发人员通知 大
  • 本地化比较属性

    这个问题的底部是一个包含三个属性的模型 OldPassword NewPassword 和ConfirmPassword 这些显示在更改密码表单中 我已本地化了所有错误消息 但以下一条除外 当 Compare 属性失败时 我无法完全本地化错
  • 我有一个 Vertx 请求,我需要计算一个外部可见(公共)URL

    我将 Vertx 3 与 Kotlin 结合使用 有时我需要从公共 URL 的角度返回一个特定的 URI 该 URI 与 Vertx web 请求认为我的 URL 不同 这可能是由于我的负载均衡器或代理接收一个 URL 然后通过内部 URL
  • Javascript-变量提升

    这是一个简单的片段 我只是不明白 下面的代码输出 12 我明白 因为var foo 12 替换先前的变量声明 在下面的代码中 它会发出警报1 这意味着在函数外部声明的变量可以在函数内部访问 但是 在下面的代码中 为什么它会警告未定义 我以为
  • CSS:最大宽度不会缩小? [复制]

    这个问题在这里已经有答案了 可能的重复 使 CSS Div 宽度等于内容宽度 https stackoverflow com questions 450903 make css div width equal to contents 我正在
  • 亚马逊MWS feed API问题,取消订单

    请帮我解决这个问题 我很久以前就尝试通过 MWS Feed API 取消亚马逊订单 但它根本没有取消 Feed 提交一切正常 但订单并未取消 下面是我的 Feed XML 我们正在使用我尝试过的报告类型 POST ORDER ACKNOWL
  • Python 是否评估前向引用的类型提示?

    我正在查看 PEP 484 部分转发参考文献 https www python org dev peps pep 0484 forward references并注意到以下声明 该定义可以表示为字符串文字 稍后解决 这让我想知道 稍后 是什
  • 从最小化状态恢复表单时,WS_EX_COMPOSITED 会导致无休止的重画

    The Form从最小化状态恢复时需要无尽的时间来重新绘制 The Form是无国界的 我凌驾于一切之上WndProc and 创建参数 我正在恢复无边界Form从最小化状态到正常状态 我凌驾于一切之上创建参数降低阴影并停止闪烁的方法 pr
  • 按三个不同列中的最大值排序

    我什至不确定是否可以执行此操作 但我想根据三列之一的最大值来排序查询 表结构示例 引导 列 1 列 2 列 3 第 1 3 列有数值 我想根据 1 2 OR 3 的最大值对 select 语句进行排序 例如 record column1 c
  • Akka testkit:时间因素是多少?

    Akka TestProbe 上有多种方法表示它们 正确处理 timeFactor 这意味着什么 http doc akka io api akka 2 0 akka testkit TestProbe html http doc akka
  • NFA 与 DFA 的时间复杂度权衡

    我正在寻找关于 nfa 或 dfa 哪个更好使用以及在编译器中什么情况下使用的讨论 模拟 nfa 与 dfa 的时间复杂度权衡是什么 在编译器的什么情况下 哪一个更合适 从 NFA 构造 DFA 的时间为 O 2 m 其中 m 是节点数 D
  • AWS S3 预签名 URL 包含 X-Amz-Security-Token

    我正在尝试使用 go sdk 为 S3 存储桶中的文件创建预签名 URL 当我从命令行运行程序时 我得到了不包含 X Amz Security Token 的预签名 URL 但如果我使用 lambda 函数中的相同代码 我总是会在 URL
  • 在 Python 类中支持等价性(“平等”)的优雅方法

    在编写自定义类时 通过以下方式允许等效性通常很重要 and 运营商 在 Python 中 这是通过实现 eq and ne 分别采用特殊方法 我发现执行此操作的最简单方法是以下方法 class Foo def init self item
  • 使用 Gtk 3 在 Python 中加载并显示来自网络的图像?

    我正在 Ubuntu 12 04 上使用 Python 和 GTK 3 编写一个应用程序 我遇到的问题是我不知道应该如何使用来自网络的图像文件在我的应用程序中显示 Gtk Image 据我所知 from gi repository impo
  • Axlsx - 设置单元格内文本的格式

    我似乎找不到任何有关是否可以使用多个格式选项填充单个单元格的信息 例如 我希望单元格 A1 填充以下文本 Hello世界 这是excel 这可能吗 如果可以 我应该使用什么语法来执行此操作 对于内联样式 请使用富文本 以下是 axlsx 页
  • 当我尝试运行 Python 脚本时,为什么会出现“预期有缩进块”? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 编辑问题以包括期望的行为 特定问题或错误以及重现问题所需的最短代码 help minimal reproducible example 这