2014-12-13 3 views
0

Если никаких подсистем камер не установлено, тогда Kivy падает при разборе виджета камеры examples/camera.py демо. Вместо сбоя, есть ли вызов, чтобы узнать, будет ли найден провайдер камеры?Как определить, установлена ​​ли камера Kivy?

Вот след:

[DEBUG    ] [Camera  ] Ignored <avfoundation> (import error) 
[DEBUG    ] [Camera  ] Ignored <opencv> (import error) 
[CRITICAL   ] [Camera  ] Unable to find any valuable Camera provider at all! 
[INFO    ] [Text  ] Provider: pygame 
Traceback (most recent call last): 
    File "camera.py", line 33, in <module> 
    CameraApp().run() 
    File "/Applications/Kivy.app/Contents/Resources/kivy/kivy/app.py", line 766, in run 
    root = self.build() 
    File "camera.py", line 29, in build 
    return Builder.load_string(kv) 
    File "/Applications/Kivy.app/Contents/Resources/kivy/kivy/lang.py", line 1522, in load_string 
    self._apply_rule(widget, parser.root, parser.root) 
    File "/Applications/Kivy.app/Contents/Resources/kivy/kivy/lang.py", line 1704, in _apply_rule 
    e)) 
kivy.lang.BuilderException: Parser: File "<inline>", line 7: 
... 
     5: Camera: 
     6:  id: camera 
>> 7:  resolution: 399, 299 
     8: 
     9: BoxLayout: 
... 
TypeError: 'NoneType' object is not callable 

ответ

2

Вы можете обернуть вызов инициал в try:..except блоке:

camera_available = False 
try: 
    cam = kivy.camera() 
except TypeError: 
    cam = None 
if not cam is None and not cam.__camera is None: # Experiment has shown both checks are needed 
    camera_available = True 
# Anything that tries to use cam now needs to check camera_available 
+0

К сожалению, это не работает. Как некоторый нечетный побочный эффект каскадных ошибок: 1) «критическая ошибка» сообщается как побочный эффект импорта kivy.uix.camera.Camera; 2) создание объекта камеры не приводит к ошибке. 3) установка разрешения на [-1, -1] не вызывает ошибки. 4) play = True или play = False не делает ошибку. Даже отображение виджета камеры не приводит к ошибке, а просто пустой экран. Ошибка при попытке установить несуществующую камеру на определенное значение. –

+0

Похоже, я могу обмануть и посмотреть на cam._camera, чтобы увидеть, нет ли этого. –

+0

Если вы не возражаете против того, что вы сделали работу, я добавлю это к ответу выше, чтобы сохранить его для других. –