Repository: holoviz/panel

Issue:
Problem with introduction.ipynb
![image](https://user-images.githubusercontent.com/1695496/58383300-969be100-7f9a-11e9-9e2e-7db63d18324b.png)
```
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-7-25b8eddf5fa6> in <module>
      9 
     10 widgets    = pn.Column("<br>\n# Sine waves", frequency, amplitude)
---> 11 sine_panel = pn.Row(reactive_sine, widgets)
     12 
     13 sine_panel

~/panel/panel/layout.py in __init__(self, *objects, **params)
    163                                  "as positional arguments or as a keyword, "
    164                                  "not both." % type(self).__name__)
--> 165             params['objects'] = [panel(pane) for pane in objects]
    166         super(Panel, self).__init__(**params)
    167 

~/panel/panel/layout.py in <listcomp>(.0)
    163                                  "as positional arguments or as a keyword, "
    164                                  "not both." % type(self).__name__)
--> 165             params['objects'] = [panel(pane) for pane in objects]
    166         super(Panel, self).__init__(**params)
    167 

~/panel/panel/pane/__init__.py in panel(obj, **kwargs)
     42     if kwargs.get('name', False) is None:
     43         kwargs.pop('name')
---> 44     pane = PaneBase.get_pane_type(obj)(obj, **kwargs)
     45     if len(pane.layout) == 1 and pane._unpack:
     46         return pane.layout[0]

~/panel/panel/param.py in __init__(self, object, **params)
    506         self._pane = Pane(self._eval_function(self.object), **kwargs)
    507         self._inner_layout = Row(self._pane, **{k: v for k, v in params.items() if k in Row.param})
--> 508         self._link_object_params()
    509 
    510     #----------------------------------------------------------------

~/panel/panel/param.py in _link_object_params(self)
    641     def _link_object_params(self):
    642         deps = self.object._dinfo
--> 643         dep_params = list(deps['dependencies']) + list(deps['kw'].values())
    644         for p in dep_params:
    645             watcher = p.owner.param.watch(self._update_pane, p.name)

KeyError: 'kw'
```


Discussion:
I also get some errors on the console, though apart from the above the apps and widgets seem to work fine:

```
[I 10:10:19.647 NotebookApp] Kernel restarted: 912b2030-cc20-4121-b1b1-0bdaeb2ece55
[I 10:10:20.201 NotebookApp] Adapting to protocol v5.1 for kernel 912b2030-cc20-4121-b1b1-0bdaeb2ece55
[I 10:10:20.202 NotebookApp] Restoring connection for 912b2030-cc20-4121-b1b1-0bdaeb2ece55:c3b33a048d6343a1bbef622c39484652
[I 10:10:20.202 NotebookApp] Replaying 6 buffered messages
[IPKernelApp] ERROR | No such comm target registered: hv-extension-comm
[IPKernelApp] WARNING | No such comm: hv-extension-comm
[IPKernelApp] WARNING | No such comm: hv-extension-comm
[IPKernelApp] WARNING | No such comm: hv-extension-comm
[IPKernelApp] WARNING | No such comm: hv-extension-comm
[IPKernelApp] WARNING | No such comm: hv-extension-comm
[IPKernelApp] WARNING | No such comm: hv-extension-comm
[IPKernelApp] WARNING | No such comm: hv-extension-comm
[IPKernelApp] WARNING | No such comm: hv-extension-comm
[IPKernelApp] WARNING | No such comm: hv-extension-comm
[IPKernelApp] WARNING | No such comm: hv-extension-comm
[IPKernelApp] WARNING | No such comm: hv-extension-comm
[I 10:10:22.147 NotebookApp] Saving file at /getting_started/Introduction.ipynb
[IPKernelApp] WARNING | No such comm: hv-extension-comm
[IPKernelApp] WARNING | No such comm: hv-extension-comm
```

pyviz_comms=0.7.2            
panel=0.6.0a1.post15+gd8a7ab2

Ah, I have this change in my stash, will push a fix shortly.

Resolving patch:
diff --git a/panel/param.py b/panel/param.py
--- a/panel/param.py
+++ b/panel/param.py
@@ -640,7 +640,7 @@ class ParamFunction(ParamMethod):
 
     def _link_object_params(self):
         deps = self.object._dinfo
-        dep_params = list(deps['dependencies']) + list(deps['kw'].values())
+        dep_params = list(deps['dependencies']) + list(deps.get('kw', {}).values())
         for p in dep_params:
             watcher = p.owner.param.watch(self._update_pane, p.name)
             self._callbacks.append(watcher)


Test patch: