Python “SyntaxError.print\u file\u和\u line”是什么意思?
在Python中,Python “SyntaxError.print\u file\u和\u line”是什么意思?,python,cpython,Python,Cpython,在Python中,SyntaxError对象具有print\u file\u和\u line属性: >>> SyntaxError.print_file_and_line <member 'print_file_and_line' of 'SyntaxError' objects> >>> help(SyntaxError.print_file_and_line) Help on member descriptor builtins.Syntax
SyntaxError
对象具有print\u file\u和\u line
属性:
>>> SyntaxError.print_file_and_line
<member 'print_file_and_line' of 'SyntaxError' objects>
>>> help(SyntaxError.print_file_and_line)
Help on member descriptor builtins.SyntaxError.print_file_and_line:
print_file_and_line
exception print_file_and_line
>>> s = SyntaxError()
>>> s.print_file_and_line
# None
>>> s.print_file_and_line = [{'what am I for'}]
>>> s.print_file_and_line
[{'what am I for'}]
>>SyntaxError.print\u file\u和\u行
>>>帮助(SyntaxError.print\u文件和\u行)
关于成员描述符builtins.SyntaxError.print\u file\u和\u行的帮助:
打印文件和行
异常打印文件和行
>>>s=合成错误()
>>>s.打印文件和行
#没有
>>>s.print_file_和_line=[{'I'm for'}]
>>>s.打印文件和行
[{'I'm for'}]
这是干什么用的?据我所知,它的存在被用作标记,在
pythonrun.c
中的print\u exception
中触发一些额外的代码,以打印出语法错误的文件和行,以及行的实际文本和标记错误位置的插入符号,打印出堆栈跟踪的其余部分后。请记住,带有语法错误的代码永远不会执行——毕竟导入失败——因此它实际上不是堆栈跟踪的一部分。我得到的印象是,print\u file\u和_line
更像是一个实现,而不是一个可以有效交互的东西
当您看到从语法错误打印的回溯时,这些标有
的行可能会打印检测到错误的文件名和行号。可能所有异常类都需要通过继承或重写来实现此方法。它不是方法
,而是成员
——因此它不可调用,只是某个或其他对象的一段数据。我怀疑这是某种标志,但将其设置为True似乎没有任何效果。
$ echo ')' > syntax_error.py
$ python -c 'import syntax_error'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "syntax_error.py", line 1 <<<
) <<<
^ <<<
SyntaxError: invalid syntax
$ python3 python_syntax_test.py
Traceback (most recent call last):
File "python_syntax_test.py", line 10, in <module>
raise FakeSyntaxException()
File "example.txt", line 123
Here is some text
^
__main__.FakeSyntaxException: Something went wrong
$ python3 python_syntax_test.py
Traceback (most recent call last):
File "python_syntax_test.py", line 10, in <module>
raise FakeSyntaxException()
__main__.FakeSyntaxException