交互式promt上的Python 3 dis.distb()汇编语言代码-Python字节码反汇编程序

问题描述 投票:0回答:1

[我正在使用python 3在命令行界面上运行代码。但是,对于dis.distb()为什么没有为我提供汇编语言代码,而我却没有为print("Hello World)中的错误加上引号感到困惑。

C:\Users\jarvis>python
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 22:20:52) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import dis
>>> print("Hello World)
  File "<stdin>", line 1
    print("Hello World)
                  ^
SyntaxError: EOL while scanning string literal
>>> dis.distb()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\jarvis\AppData\Local\Programs\Python\Python37-32\lib\dis.py", line 86, in distb
    while tb.tb_next: tb = tb.tb_next
AttributeError: 'NoneType' object has no attribute 'tb_next'

此代码为我提供了缺少字母't'的打印功能的汇编代码

>>> prin("Hello World")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'prin' is not defined
>>> dis.distb()
  1 -->       0 LOAD_NAME                0 (prin)
              2 LOAD_CONST               0 ('Hello World')
              4 CALL_FUNCTION            1
              6 PRINT_EXPR
              8 LOAD_CONST               1 (None)
             10 RETURN_VALUE

 >>>

上面的错误类型有什么区别?我试图了解python在这种情况下如何工作。

python-3.x command-line-interface bytecode disassembly python-interactive
1个回答
0
投票

您之所以没有得到字节码的原因仅仅是因为没有原因:Python解释器在创建任何字节码之前就遇到了严重错误。

这里是一个非常常见的类似物,但是它是可用的嘻嘻。假设我要翻译:

“这些树林是谁,我想我知道”

译成西班牙语。基本上,您会理解这些单词(或者,如果有人说这些单词,您可能会在脑海中将声音分解为音素并找出单词)。

然后将单词拼凑成一个句子,然后将句子解析成一个主语和宾语短语。)有了这些,您就可以进行翻译了。如果您听不到或听不懂一个单词,您也许可以弄清楚这是什么意思,但这是额外的工作,您可能会猜错单词或含义。

现在,如果相反,我要请您翻译:

“ fafdsasdSFEFafef094qt43qtu08rpiekjsfdrshgoirtfhejtr4qr5841u0toiqjhwekfnsajf”

[那里没有可口的单词,您只能组成句子并进行分析。您能做的最好的就是吐出同一件事,例如,谷歌翻译所做的。

但是在编程语言中,计算机可能非常挑剔。如果缺少双引号(如您所处的情况),CPython会为您提供有关无效语法的消息,并带有指示问题出在何处以及可以如何解决的指针。但它不会尝试进一步创建字节码。与Google翻译不同,这是missin,不是要弄清楚给出部分信息可能意味着什么。

© www.soinside.com 2019 - 2024. All rights reserved.