[英]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
,但問題是相同的。)
根據x
, AttributeError: __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:
創建具有三個特征的上下文(執行環境):
__enter__
方法(函數); name
; __exit__
方法。 您with x as 1
嘗試在所有特征上均失敗。 x
沒有__enter__
或__exit__
方法; 沒有返回值; 您不能將該返回值分配給常數1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.