Обратите внимание, что исключение RuntimeException намеренно бросается в приложение, если не были получены достоверные аудио / видео данные, когда stop () называется. Это происходит, если stop () вызывается сразу после start (). Неисправность позволяет приложению предпринять соответствующие действия для очистки выходного файла (например, удалить выходной файл), поскольку выходной файл неправильно сконфигурирован, когда это произойдет.
Другими словами : Dalvik специально делает исключение. Вы должны обработать его для очистки после своего приложения. Вам придется обрабатывать его следующим образом:
private void stopRecording() { try{ recorder.stop(); }catch(RuntimeException stopException){ //handle cleanup here } camera.lock(); }
вы можете использовать всегда:
'C:/mydir'
это работает как в linux, так и в окнах. Другая возможность -
'C:\\mydir'
, если у вас есть проблемы с некоторыми именами, вы также можете попробовать сырые строковые литералы:
r'C:\mydir'
, однако лучше всего использовать функции модуля os.path
которые всегда выбирают правильную конфигурацию для вашей ОС:
os.path.join(mydir, myfile)
Используйте модуль os.path
.
os.path.join( "C:", "meshes", "as" )
Или используйте необработанные строки
r"C:\meshes\as"
"C:\"
в качестве первой записи? Означает ли это, что из-за чистоты использования join
?
– Jack O'Connor
21 February 2014 в 02:53
"C:\"
в середину имени файла. Кроме того, вы можете использовать os.path.normpath
до или после соединения, чтобы убедиться, что путь печатается красиво.
– Agostino
7 April 2015 в 18:03
Да, \
в строковых литералах Python обозначает начало escape-последовательности. На вашем пути у вас есть действительная двухсимвольная escape-последовательность \a
, которая сжимается на символ one , который является ASCII Bell :
>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess
Другие общие escape-последовательности включают в себя \t
(вкладка), \n
(строка), \r
(возврат каретки):
>>> list('C:\test')
['C', ':', '\t', 'e', 's', 't']
>>> list('C:\nest')
['C', ':', '\n', 'e', 's', 't']
>>> list('C:\rest')
['C', ':', '\r', 'e', 's', 't']
Как вы можете видеть, во всех этих примерах обратная косая черта и следующий символ в литерале были сгруппированы вместе, чтобы сформировать единственный символ в финальной строке. Полный список управляющих последовательностей Python здесь здесь .
Существует множество способов борьбы с этим:
r
или R
: >>> r'C:\meshes\as'
'C:\\meshes\\as'
>>> print(r'C:\meshes\as')
C:\meshes\as
os.path.join
... >>> import os
>>> os.path.join('C:', os.sep, 'meshes', 'as')
'C:\\meshes\\as'
pathlib
модуль >>> from pathlib import Path
>>> Path('C:', '/', 'meshes', 'as')
WindowsPath('C:/meshes/as')