Redefining name 'i' from outer scope (line 342)
511 def prediction_func():
512 """Function that wraps the prediction code."""
513 predict_plots = []
514 for i, station in enumerate(highrisk_stations):515 try:
516 date, level = predict(
517 station.name,
Redefining name 'predicting_text' from outer scope (line 251)
543 predict_plot.plot_height = 400
544 predict_plot.sizing_mode = "scale_width"
545 predict_plots.append(Panel(child=predict_plot, title=station.name))
546 predicting_text = Div(547 text="<p><i>Prediction is running... {:.0%}</i></p>".format(i / 6)
548 )
549 doc.add_next_tick_callback(
Description
The local variable name hides the variable defined in the outer scope, making it inaccessible and might confuse.
Bad practice
filename = 'myfile.txt'
def read_file(filename): # This shadows the global `filename`
with open(filename) as file:
return file.readlines()
Preferred:
FILENAME = 'myfile.txt' # renamed global to UPPER_CASE as convention
def read_file(filename):
with open(filename) as file:
return file.readlines()
Bad practice
Another usual suspect of this is when you use the same parameter name inside a function as the global variable you are using. For example:
def run_app(app):
# This `app` shadows the global app...
app.run()
if __name__ == '__main__':
app = MyApp() # This is a global variable!
run_app(app)
Preferred:
To avoid this re-defining of a global, consider not defining app
as a global, but inside a main()
function instead:
def run_app(app):
# There is no longer a global `app` variable.
app.run()
def main():
app = MyApp()
run_app(app)
if __name__ == '__main__':
main()