簡體   English   中英

帶有語句的Python:“語法錯誤:語法無效”

[英]Python with statement: 'Syntax error: invalid syntax'

我嘗試了以下代碼:

with x as 1:
    y = 1
with z as 1:
    w = 1

編譯器報告了SyntaxError:無效的語法。 問題是什么?

[編輯:]我正在嘗試做的是:

import tensorflow as tf
with tf.variable_scope("model"):
    y = 1
with tf.variable_scope("model2"):
    z = 1

我想在張量流中更改名稱范圍以共享變量。 我看了在線教程,但這並沒有太大幫助。

稍微簡化一下,您的代碼:

with x as 1:
    y = 1

……翻譯成這樣的東西:

try:
    1 = x.__enter__()
    y = 1
finally:
    1.__exit__()

1 = x.__enter__()顯然會引發SyntaxError: can't assign to literal ,因為這並不意味着給文字常量1分配新值。

with語句中執行相同的操作會引發相同的異常。 (在舊版本的Python(我認為只有2.5嗎?)中,錯誤消息沒有那么有用,它只是說SyntaxError: invalid syntax ,但問題是相同的。)


根據xAttributeError: __enter__ SyntaxError可能會引發一個新異常AttributeError: __enter__ with語句中只能使用上下文管理器 粗略地講,這些都是知道自己如何清理的東西,無論如何,在某些代碼塊的末尾清理它們的重要位置。 文件是典型的示例:退出塊時它們調用self.close() ,以確保不會因self.close()成百上千個打開的文件而不會出現操作系統錯誤,或者不會刷新上一次write或其他此類問題。

有關with更多信息,請參閱PEP 343 (最初with Python 2.5 with添加的提案)或了解Python的“ with”語句(來自effbot)


所以,這里的問題是:您想做什么? 如果只想將值1分配給名稱x ,那么您已經知道該怎么做,因為您在下一行使用y進行了處理:僅x = 1 如果你試圖做一些不同......嗯,有可能是一個辦法做到這一點,但with可能是無處正確的答案附近。

您誤解了Python的with語句 如果您告訴我們您想做什么,我們可以為您提供幫助。

with context_obj as name:

創建具有三個特征的上下文(執行環境):

  1. 輸入上下文后,將調用對象的__enter__方法(函數);
  2. 該函數的返回值分配給name ;
  3. 離開上下文時, 無論我們如何離開上下文都將調用對象的__exit__方法。

with x as 1嘗試在所有特征上均失敗。 x沒有__enter____exit__方法; 沒有返回值; 您不能將該返回值分配給常數1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM