[我正在使用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解释器在创建任何字节码之前就遇到了严重错误。
这里是一个非常常见的类似物,但是它是可用的嘻嘻。假设我要翻译:
“这些树林是谁,我想我知道”
译成西班牙语。基本上,您会理解这些单词(或者,如果有人说这些单词,您可能会在脑海中将声音分解为音素并找出单词)。
然后将单词拼凑成一个句子,然后将句子解析成一个主语和宾语短语。)有了这些,您就可以进行翻译了。如果您听不到或听不懂一个单词,您也许可以弄清楚这是什么意思,但这是额外的工作,您可能会猜错单词或含义。
现在,如果相反,我要请您翻译:
“ fafdsasdSFEFafef094qt43qtu08rpiekjsfdrshgoirtfhejtr4qr5841u0toiqjhwekfnsajf”
[那里没有可口的单词,您只能组成句子并进行分析。您能做的最好的就是吐出同一件事,例如,谷歌翻译所做的。
但是在编程语言中,计算机可能非常挑剔。如果缺少双引号(如您所处的情况),CPython会为您提供有关无效语法的消息,并带有指示问题出在何处以及可以如何解决的指针。但它不会尝试进一步创建字节码。与Google翻译不同,这是missin,不是要弄清楚给出部分信息可能意味着什么。