当我从函数返回它时,Python(2.7.3)以某种奇怪的方式违反了我的mysql-connector游标。第一个例子很好用...
cnx = connect()
sql = "SELECT * FROM MyTable"
cursor = cnx.cursor()
cursor.execute(sql)
row = cursor.fetchone()
Run Code Online (Sandbox Code Playgroud)
但是,如果我返回游标并从外部尝试fetchone()(或fetchall()),它将引发异常。
def run_query():
cnx = connect()
sql = "SELECT * FROM MyTable"
cursor = cnx.cursor()
cursor.execute(sql)
return cursor
mycursor = run_query()
row = mycursor.fetchone()
Run Code Online (Sandbox Code Playgroud)
扔...
File "/usr/lib/pymodules/python2.7/mysql/connector/cursor.py", line 533, in fetchone
row = self._fetch_row()
File "/usr/lib/pymodules/python2.7/mysql/connector/cursor.py", line 508, in _fetch_row
(row, eof) = self.db().protocol.get_row()
AttributeError: 'NoneType' object has no attribute 'protocol'
Run Code Online (Sandbox Code Playgroud)
尽管“打印类型(mycursor)”将打印“ mysql.connector.cursor.MySQLCursor”,这是事实。
Python对从函数返回的对象执行哪种邪恶的骚扰?(请记住,它将对在模块内传递的游标执行此操作……因此,这不像从“ import mysql.connector”作用域传递出去的对象一样。)
假设我有两个HashMaps(或任何具有映射到其他键的键的映射结构)map1和map2,并且我想确保它们具有相同的键集。需要注意的是,钥匙都在地图同一类型,但值都不会。
我最初的尝试只是:
map1.keys().eq(map2.keys())
Run Code Online (Sandbox Code Playgroud)
并且,尽管这是第一次成功,但迭代器的eq函数(可以理解)似乎按照迭代器产生的顺序比较键,而不是通过检查第二个迭代器中任何地方是否存在键来进行比较。这与HashMap :: keys()生成一个迭代器(其中键的顺序是不确定的)相结合的事实意味着,即使键的集合(从集合论的角度来看)是相等的,相等函数也经常会失败。相同。
因此,我的下一个尝试是制作一个执行此操作的函数:
fn keys_match<T:std::cmp::Eq + std::hash::Hash,U,V>(map1:&HashMap<T,U>, map2:&HashMap<T,V>) -> bool {
// Make sure that map1.keys() ? map2.keys()
for key in map1.keys() {
match map2.get(key) {
None => return false,
Some(_) => {}
}
}
// If map1.keys() ? map2.keys() and their sizes equal, then the sets are equal
map1.len() == map2.len()
}
Run Code Online (Sandbox Code Playgroud)
Rust初学者注意:实际上,我的第一次尝试是知道映射中的键是String类型的,所以我的函数签名是:
fn keys_match<T,U>(map1:&HashMap<String,T>, …
Run Code Online (Sandbox Code Playgroud) 我在页面上使用Google Visualizations量表,但重要的是它显示的值不会显示为针头正下方的标签.
我发现了两种方法.一旦您将DOM导航到规范窗口小部件并导航到SVG部分,您可以将textContent元素设置为空字符串,也可以完全删除整个文本标签实体.
function removeLabel(widget) {
var gauge_label_parent = widget.getElementsByTagName("g")[1];
var gauge_label = gauge_label_parent.getElementsByTagName("text")[0];
gauge_label.textContent = "";
// Another way of getting rid of the text: remove the element
// gauge_label_parent.removeChild(gauge_label);
}
Run Code Online (Sandbox Code Playgroud)
问题是:这两种技术都是第一次起作用.如果我使用更新的值重新绘制仪表,则标签会重新出现,并尝试删除标签元素或设置textContent =""不会执行任何操作.
因此,而不是只能用以下内容更新值:
data.setValue(0, 1, newValue);
chart.draw(data, options);
Run Code Online (Sandbox Code Playgroud)
我发现我必须稍微改变一下选项,比如:
data.setValue(0, 1, newValue);
options.minorTicks = 3; // Change the options somehow
chart.draw(data, options); // Tell gauge to draw that
options.minorTicks = 2; // Change the options back to what they were
chart.draw(data, options); // Draw again
Run Code Online (Sandbox Code Playgroud)
这是一个小提琴,看看它是如何工作的.将fixLabel设置为true或false,具体取决于您是否要存在标签问题.请记住,第一次标签将(正确)丢失.更新其值时会重新显示. …